Сущности в JPA
В Java Persistence API (JPA) сущности представляют собой объекты, которые будут храниться в базе данных. Эти объекты маппируются на таблицы базы данных и могут содержать атрибуты, которые соответствуют столбцам таблицы.
1. Основные принципы сущности в JPA
Сущности JPA — это классы, которые автоматически маппируются на таблицы базы данных.
Важно понимать, что сущности:
Являются Java POJO (Plain Old Java Object) классами, которые должны иметь конструктор без параметров.
Должны быть аннотированы аннотацией @Entity.
Каждый объект сущности будет соответствовать одной строке в базе данных.
Для работы с сущностью в базе данных используется Entity Manager, который управляет состоянием объектов и их персистенцией.
2. Основные аннотации для сущностей
2.1 @Entity
Аннотация @Entity указывает, что класс является сущностью, которая будет маппироваться на таблицу в базе данных.
Класс, аннотированный @Entity, будет автоматически сопоставлен с таблицей в базе данных.
Если не указано, имя таблицы будет автоматически сформировано из имени класса.
2.2 @Table
Аннотация @Table используется для настройки таблицы, с которой будет работать сущность. Вы можете указать имя таблицы, схему и ограничения.
2.3 @Id
Аннотация @Id указывает на поле, которое является первичным ключом для сущности.
3. Стратегии генерации значений для первичного ключа
3.1 GenerationType.IDENTITY
Эта стратегия используется для автоматической генерации значений в столбце, обычно используется в базе данных с поддержкой автоинкремента.
3.2 GenerationType.SEQUENCE
Используется для генерации уникальных значений через последовательности базы данных.
3.3 GenerationType.TABLE
Использует специальную таблицу для генерации уникальных значений.
4. Маппинг полей сущности на столбцы таблицы
4.1 @Column
Аннотация @Column используется для маппинга поля сущности на столбец таблицы.
4.2 @Lob
Аннотация @Lob используется для хранения больших объектов (например, текста или бинарных данных). Это может быть полезно для хранения изображений, файлов или больших текстовых полей.
4.3 @Transient
Аннотация @Transient используется для исключения поля из маппинга. Это поле не будет сохраняться в базе данных.
#Java #Training #Spring #JPA_Entity
В Java Persistence API (JPA) сущности представляют собой объекты, которые будут храниться в базе данных. Эти объекты маппируются на таблицы базы данных и могут содержать атрибуты, которые соответствуют столбцам таблицы.
1. Основные принципы сущности в JPA
Сущности JPA — это классы, которые автоматически маппируются на таблицы базы данных.
Важно понимать, что сущности:
Являются Java POJO (Plain Old Java Object) классами, которые должны иметь конструктор без параметров.
Должны быть аннотированы аннотацией @Entity.
Каждый объект сущности будет соответствовать одной строке в базе данных.
Для работы с сущностью в базе данных используется Entity Manager, который управляет состоянием объектов и их персистенцией.
2. Основные аннотации для сущностей
2.1 @Entity
Аннотация @Entity указывает, что класс является сущностью, которая будет маппироваться на таблицу в базе данных.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// геттеры и сеттеры
}
Класс, аннотированный @Entity, будет автоматически сопоставлен с таблицей в базе данных.
Если не указано, имя таблицы будет автоматически сформировано из имени класса.
2.2 @Table
Аннотация @Table используется для настройки таблицы, с которой будет работать сущность. Вы можете указать имя таблицы, схему и ограничения.
@Entity
@Table(name = "users", schema = "public")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
}
Атрибуты name и schema позволяют указать, на какую таблицу и в какой схеме будет маппироваться класс.
2.3 @Id
Аннотация @Id указывает на поле, которое является первичным ключом для сущности.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
Поле, помеченное @Id, будет использоваться как первичный ключ таблицы.
Аннотация @GeneratedValue указывает стратегию генерации значений первичного ключа.
3. Стратегии генерации значений для первичного ключа
3.1 GenerationType.IDENTITY
Эта стратегия используется для автоматической генерации значений в столбце, обычно используется в базе данных с поддержкой автоинкремента.
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
3.2 GenerationType.SEQUENCE
Используется для генерации уникальных значений через последовательности базы данных.
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_seq")
@SequenceGenerator(name = "user_seq", sequenceName = "user_sequence")
private Long id;
3.3 GenerationType.TABLE
Использует специальную таблицу для генерации уникальных значений.
@GeneratedValue(strategy = GenerationType.TABLE, generator = "id_gen")
@TableGenerator(name = "id_gen", table = "id_generator")
private Long id;
4. Маппинг полей сущности на столбцы таблицы
4.1 @Column
Аннотация @Column используется для маппинга поля сущности на столбец таблицы.
@Column(name = "username", nullable = false, unique = true, length = 50)
private String username;
name: имя столбца.
nullable: указывает, может ли столбец быть пустым.
unique: задает уникальность значения столбца.
length: максимальная длина строкового значения.
4.2 @Lob
Аннотация @Lob используется для хранения больших объектов (например, текста или бинарных данных). Это может быть полезно для хранения изображений, файлов или больших текстовых полей.
@Lob
private String description;
4.3 @Transient
Аннотация @Transient используется для исключения поля из маппинга. Это поле не будет сохраняться в базе данных.
@Transient
private String temporaryData;
#Java #Training #Spring #JPA_Entity
5. Работа с жизненным циклом сущности
5.1 @PrePersist, @PostPersist
Эти аннотации позволяют реализовывать методы, которые вызываются перед или после вставки сущности в базу данных.
#Java #Training #Spring #JPA_Entity
5.1 @PrePersist, @PostPersist
Эти аннотации позволяют реализовывать методы, которые вызываются перед или после вставки сущности в базу данных.
@Entity
public class Order {
@Id
private Long id;
@PrePersist
public void prePersist() {
System.out.println("Before persisting the Order");
}
@PostPersist
public void postPersist() {
System.out.println("After persisting the Order");
}
}
#Java #Training #Spring #JPA_Entity