Аннотации @AttributeOverride и @AttributeOverrides
Аннотации @AttributeOverride и @AttributeOverrides используются в Java Persistence API (JPA) для переопределения маппинга атрибутов встроенных (embedded) объектов или сущностей. Они позволяют кастомизировать маппинг столбцов базы данных для атрибутов, которые определены в другом классе. Эти аннотации находятся в пакете javax.persistence (или jakarta.persistence в Jakarta EE).
@AttributeOverride: Используется для переопределения маппинга одного атрибута.
@AttributeOverrides: Используется для переопределения маппинга нескольких атрибутов.
@AttributeOverride
Аннотация @AttributeOverride принимает два параметра:
name: Имя атрибута встроенного объекта, маппинг которого нужно переопределить.
column: Аннотация @Column, которая определяет новый маппинг для атрибута.
Пример использования:
@AttributeOverrides
Аннотация @AttributeOverrides принимает массив из @AttributeOverride и используется для переопределения маппинга нескольких атрибутов.
Пример использования:
Если аннотации @AttributeOverride или @AttributeOverrides не указаны, JPA использует маппинг, определенный во встроенном классе.
Жизненный цикл
Применение: Аннотации применяются на этапе маппинга сущности JPA. Они используются при создании таблиц в базе данных (если используется автоматическая генерация схемы) и при выполнении операций чтения/записи данных.
Инициализация: При загрузке сущности из базы данных JPA использует переопределенный маппинг для получения данных.
Уничтожение: При сохранении сущности в базу данных JPA использует переопределенный маппинг для записи данных.
Кастомизация маппинга:
Если требуется более сложная кастомизация маппинга, можно использовать аннотацию @Embeddable для определения встроенных объектов и @AttributeOverride для их переопределения.
Пример использования:
#Java #Training #Hard #Spring #SpringDataJPA #AttributeOverrides #AttributeOverride
Аннотации @AttributeOverride и @AttributeOverrides используются в Java Persistence API (JPA) для переопределения маппинга атрибутов встроенных (embedded) объектов или сущностей. Они позволяют кастомизировать маппинг столбцов базы данных для атрибутов, которые определены в другом классе. Эти аннотации находятся в пакете javax.persistence (или jakarta.persistence в Jakarta EE).
@AttributeOverride: Используется для переопределения маппинга одного атрибута.
@AttributeOverrides: Используется для переопределения маппинга нескольких атрибутов.
@AttributeOverride
Аннотация @AttributeOverride принимает два параметра:
name: Имя атрибута встроенного объекта, маппинг которого нужно переопределить.
column: Аннотация @Column, которая определяет новый маппинг для атрибута.
Пример использования:
@Embedded
@AttributeOverride(name = "street", column = @Column(name = "home_street"))
private Address address;
@AttributeOverrides
Аннотация @AttributeOverrides принимает массив из @AttributeOverride и используется для переопределения маппинга нескольких атрибутов.
Пример использования:
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "street", column = @Column(name = "home_street")),
@AttributeOverride(name = "city", column = @Column(name = "home_city"))
})
private Address address;
Если аннотации @AttributeOverride или @AttributeOverrides не указаны, JPA использует маппинг, определенный во встроенном классе.
Жизненный цикл
Применение: Аннотации применяются на этапе маппинга сущности JPA. Они используются при создании таблиц в базе данных (если используется автоматическая генерация схемы) и при выполнении операций чтения/записи данных.
Инициализация: При загрузке сущности из базы данных JPA использует переопределенный маппинг для получения данных.
Уничтожение: При сохранении сущности в базу данных JPA использует переопределенный маппинг для записи данных.
Кастомизация маппинга:
Если требуется более сложная кастомизация маппинга, можно использовать аннотацию @Embeddable для определения встроенных объектов и @AttributeOverride для их переопределения.
Пример использования:
@Embeddable
public class Address {
private String street;
private String city;
}
@Entity
public class User {
@Id
private Long id;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "street", column = @Column(name = "home_street")),
@AttributeOverride(name = "city", column = @Column(name = "home_city"))
})
private Address homeAddress;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "street", column = @Column(name = "work_street")),
@AttributeOverride(name = "city", column = @Column(name = "work_city"))
})
private Address workAddress;
}
#Java #Training #Hard #Spring #SpringDataJPA #AttributeOverrides #AttributeOverride