Документация Hibernate, говорит, что:
Hibernate делает свойства идентификатора необязательными. Существует ряд причин, по которым вы должны их использовать. Мы рекомендуем, чтобы идентификаторы были "синтетическими", то есть сгенерированными без бизнес-значения.
Поскольку он говорит, что идентификатор является необязательным, я попытался создать объект без аннотации @Id
для любого из полей. Затем я получил исключение:
Initial SessionFactory creation failed.org.hibernate.AnnotationException:
No identifier specified for entity: org.hibernate.tutorials.User
Тогда это означает, что Hibernate makes identifier properties optional.
Может кто-нибудь объяснить?
Опциональность идентификаторов связана с тем, что вам не нужно самостоятельно создавать содержимое столбца, так как Hibernate может автоматически генерировать его.
Напротив, было бы не очень разумно иметь столбец идентификации в таблице, поэтому Hibernate требует, чтобы вы определили соответствующее поле в своих классах Entity, чтобы сохранить какое-то идентифицирующее значение. Это необязательно должно быть @Id
автоматического приращения, но, конечно, для каждой сущности требуется @Id
Annotation в одном из своих полей, предпочтительно String
или int