Я узнаю о JPA из этого учебного руководства.
У меня есть некоторые беспорядки в понимании следующих аннотаций:
@Basic
@Embedded
Поля встраиваемого значения по умолчанию типа к персистентному, как будто аннотируемый @Embedded.
Если бы поля встраиваемого значения по умолчанию типов к персистентному, то, почему нам было бы нужно @Embedded
аннотация
Аннотация @Embeddable
позволяет указать класс, экземпляры которого хранятся как внутренняя часть объекта-владельца. Эта аннотация не имеет атрибутов .
@Embeddable
public class EmploymentPeriod {
java.util.Date startDate;
java.util.Date endDate;
...
}
Аннотация @Embedded
используется для указания постоянного поля или свойства объекта, значение которого является экземпляром встраиваемого класса. По умолчанию определения столбцов, указанные в классе @Embeddable
, применяются к таблице объекта-владельца, но вы можете переопределить их с помощью @AttributeOverride
:
@Embedded
@AttributeOverrides({
@AttributeOverride(name="startDate", column=@Column(name="EMP_START")),
@AttributeOverride(name="endDate", column=@Column(name="EMP_END"))
})
public EmploymentPeriod getEmploymentPeriod() { ... }
Что касается необязательная аннотация @Basic
, вы можете использовать ее для настройки типа выборки на LAZY
и для настройки сопоставления, запрещающего нулевые значения (для не примитивных типов) с необязательным
атрибут.
@Basic(fetch=LAZY)
protected String getName() { return name; }
Вы также можете поместить его в поле или свойство, чтобы явно пометить его как постоянный (для целей документации).
При отображении ORM гранулярность вашей объектной модели может быть более тонкой, чем у вашей базы данных.
Например, вы можете иметь запись Person
в вашей базе данных, которая может быть далее декомпозирована и содержать ссылку на объект Address
в вашей модели. Вот здесь и приходят на помощь аннотации @Embedded
и @Embeddable
. Они просто определяют отношения, в которых одна сущность
может храниться как часть другой.
Что касается аннотации @Basic
, то это простейшая форма отображения, которая по умолчанию применяется к примитивным типам, таким как int и float и их оберткам, а также к перечислениям. Более подробную информацию можно получить здесь: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html#entity-mapping-property