Java - JPA @Basic и @Embedded аннотации

Я узнаю о JPA из этого учебного руководства.

У меня есть некоторые беспорядки в понимании следующих аннотаций:

  • @Basic
  • @Embedded

Поля встраиваемого значения по умолчанию типа к персистентному, как будто аннотируемый @Embedded.

Если бы поля встраиваемого значения по умолчанию типов к персистентному, то, почему нам было бы нужно @Embedded аннотация

34
задан Alain Tiemblo 29 December 2012 в 18:15
поделиться

2 ответа

Аннотация @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; }

Вы также можете поместить его в поле или свойство, чтобы явно пометить его как постоянный (для целей документации).

51
ответ дан 27 November 2019 в 16:40
поделиться

При отображении ORM гранулярность вашей объектной модели может быть более тонкой, чем у вашей базы данных.

Например, вы можете иметь запись Person в вашей базе данных, которая может быть далее декомпозирована и содержать ссылку на объект Address в вашей модели. Вот здесь и приходят на помощь аннотации @Embedded и @Embeddable. Они просто определяют отношения, в которых одна сущность может храниться как часть другой.

Что касается аннотации @Basic, то это простейшая форма отображения, которая по умолчанию применяется к примитивным типам, таким как int и float и их оберткам, а также к перечислениям. Более подробную информацию можно получить здесь: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html#entity-mapping-property

13
ответ дан 27 November 2019 в 16:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: