Аннотации JPA: @Embeddable, @Embedded, @ElementCollection, @Inheritance, @Cacheable, @Lock, @EntityListeners, @SQLInsert, @SQLUpdate, @SQLDelete
1. @Embeddable и @Embedded
Аннотация @Embeddable обозначает класс, который будет встраиваться в другие сущности, а @Embedded — указывает, что поле встраивает такой класс.
2. @ElementCollection
Используется для хранения коллекций простых типов или встраиваемых объектов.
3. @Inheritance
Настраивает стратегию наследования для сущностей.
4. @Cacheable
Обозначает, что сущность может быть закеширована.
5. @Lock
Используется для управления блокировками данных.
6. @EntityListeners
Позволяет подключать слушатели для отслеживания событий сущности.
7. @SQLInsert, @SQLUpdate, @SQLDelete
Эти аннотации позволяют задать кастомные SQL-запросы для операций вставки, обновления и удаления.
#Java #Training #Spring #Embeddable, #Embedded, #ElementCollection, #Inheritance, #Cacheable, #Lock, #EntityListeners, #SQLInsert, #SQLUpdate, #SQLDelete
1. @Embeddable и @Embedded
Аннотация @Embeddable обозначает класс, который будет встраиваться в другие сущности, а @Embedded — указывает, что поле встраивает такой класс.
@Embeddable
public class Address {
private String street;
private String city;
}
@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Embedded
private Address address;
}
2. @ElementCollection
Используется для хранения коллекций простых типов или встраиваемых объектов.
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ElementCollection
private List<String> tags;
}
3. @Inheritance
Настраивает стратегию наследования для сущностей.
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Vehicle {
@Id
private Long id;
}
@Entity
public class Car extends Vehicle {
private int seatingCapacity;
}
4. @Cacheable
Обозначает, что сущность может быть закеширована.
@Entity
@Cacheable
public class Product {
@Id
private Long id;
private String name;
}
5. @Lock
Используется для управления блокировками данных.
@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("SELECT u FROM User u WHERE u.id = :id")
User findForUpdate(@Param("id") Long id);
6. @EntityListeners
Позволяет подключать слушатели для отслеживания событий сущности.
@Entity
@EntityListeners(AuditListener.class)
public class Order {
@Id
private Long id;
}
7. @SQLInsert, @SQLUpdate, @SQLDelete
Эти аннотации позволяют задать кастомные SQL-запросы для операций вставки, обновления и удаления.
@SQLInsert(sql = "INSERT INTO user_audit (id, username) VALUES (?, ?)")
@SQLDelete(sql = "DELETE FROM user_audit WHERE id = ?")
@Entity
public class UserAudit {
@Id
private Long id;
}
#Java #Training #Spring #Embeddable, #Embedded, #ElementCollection, #Inheritance, #Cacheable, #Lock, #EntityListeners, #SQLInsert, #SQLUpdate, #SQLDelete
Аннотация @Embedded
Аннотация @Embedded используется в Java Persistence API (JPA) для указания того, что поле сущности является встроенным объектом (embedded object). Встроенный объект — это класс, помеченный аннотацией @Embeddable, который не является самостоятельной сущностью, но его поля включаются в таблицу сущности, которая его использует. Аннотация @Embedded находится в пакете javax.persistence (или jakarta.persistence в Jakarta EE).
Аннотация @Embedded не принимает параметров. Она просто указывает, что поле сущности является встроенным объектом.
Пример использования:
Если аннотация @Embedded не указана, JPA автоматически распознает встроенные объекты, если их класс помечен аннотацией @Embeddable.
Поля встроенного объекта включаются в таблицу сущности, которая его использует.
Жизненный цикл
Применение: Аннотация @Embedded применяется на этапе маппинга сущности JPA. Она определяет, что поле является встроенным объектом.
Инициализация: При загрузке сущности из базы данных JPA создает экземпляр встроенного объекта и заполняет его данными.
Уничтожение: При сохранении сущности в базу данных JPA сохраняет данные встроенного объекта в таблицу сущности.
Кастомизация маппинга:
Если требуется переопределить маппинг полей встроенного объекта, можно использовать аннотации @AttributeOverride и @AttributeOverrides в сущности, которая использует встроенный объект.
Варианты настройки
Использование встроенных объектов:
Подходит для случаев, когда требуется повторно использовать группу полей в нескольких сущностях.
Упрощает код, так как не требуется дублировать поля в разных сущностях.
Переопределение маппинга:
Позволяет гибко настраивать маппинг полей встроенного объекта для каждой сущности, используя @AttributeOverride и @AttributeOverrides.
Использование встроенных объектов с коллекциями:
Если встроенный объект содержит коллекции, их маппинг должен быть явно настроен с использованием аннотаций JPA (например, @ElementCollection).
#Java #Training #Hard #Spring #SpringDataJPA #Embedded
Аннотация @Embedded используется в Java Persistence API (JPA) для указания того, что поле сущности является встроенным объектом (embedded object). Встроенный объект — это класс, помеченный аннотацией @Embeddable, который не является самостоятельной сущностью, но его поля включаются в таблицу сущности, которая его использует. Аннотация @Embedded находится в пакете javax.persistence (или jakarta.persistence в Jakarta EE).
Аннотация @Embedded не принимает параметров. Она просто указывает, что поле сущности является встроенным объектом.
Пример использования:
@Entity
public class User {
@Id
private Long id;
@Embedded
private Address address;
}
Если аннотация @Embedded не указана, JPA автоматически распознает встроенные объекты, если их класс помечен аннотацией @Embeddable.
Поля встроенного объекта включаются в таблицу сущности, которая его использует.
Жизненный цикл
Применение: Аннотация @Embedded применяется на этапе маппинга сущности JPA. Она определяет, что поле является встроенным объектом.
Инициализация: При загрузке сущности из базы данных JPA создает экземпляр встроенного объекта и заполняет его данными.
Уничтожение: При сохранении сущности в базу данных JPA сохраняет данные встроенного объекта в таблицу сущности.
Кастомизация маппинга:
Если требуется переопределить маппинг полей встроенного объекта, можно использовать аннотации @AttributeOverride и @AttributeOverrides в сущности, которая использует встроенный объект.
Варианты настройки
Использование встроенных объектов:
Подходит для случаев, когда требуется повторно использовать группу полей в нескольких сущностях.
Упрощает код, так как не требуется дублировать поля в разных сущностях.
Переопределение маппинга:
Позволяет гибко настраивать маппинг полей встроенного объекта для каждой сущности, используя @AttributeOverride и @AttributeOverrides.
Использование встроенных объектов с коллекциями:
Если встроенный объект содержит коллекции, их маппинг должен быть явно настроен с использованием аннотаций JPA (например, @ElementCollection).
#Java #Training #Hard #Spring #SpringDataJPA #Embedded