Java for Beginner
672 subscribers
540 photos
155 videos
12 files
826 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Сущности в JPA

В 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

Эти аннотации позволяют реализовывать методы, которые вызываются перед или после вставки сущности в базу данных.

@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