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

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

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Основные аннотации JPA: @Entity, @Table, @Id

1. Аннотация @Entity
@Entity указывает, что класс представляет собой сущность базы данных. Каждая сущность соответствует таблице в базе данных.

Пример:
import jakarta.persistence.Entity;

@Entity
public class Product {
private Long id;
private String name;
private Double price;
}
Если класс помечен как @Entity, но таблица не указана явно, Spring автоматически использует название класса для создания таблицы в базе данных.


2. Аннотация @Table

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

Пример:
import jakarta.persistence.Entity;
import jakarta.persistence.Table;

@Entity
@Table(name = "products", schema = "shop")
public class Product {
private Long id;
private String name;
private Double price;
}
Если имя таблицы не указано, то по умолчанию используется имя класса.


3. Аннотация @Id

@Id используется для указания первичного ключа таблицы.

Пример:
import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class Product {

@Id
private Long id;

private String name;
private Double price;
}


Другие полезные аннотации

1.
@GeneratedValue

Используется вместе с @Id для автоматической генерации значения первичного ключа.
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;


Стратегии генерации:
AUTO — автоматически выбирает стратегию, зависящую от базы данных.
IDENTITY — использует автоинкремент в базе данных.
SEQUENCE — использует специальную таблицу для генерации уникальных значений.
TABLE — сохраняет последовательности значений в отдельной таблице.

2. @Column

Позволяет указать имя столбца, его уникальность, длину и другие параметры.
import jakarta.persistence.Column;

@Column(name = "product_name", nullable = false, unique = true)
private String name;


3. @Transient

Позволяет исключить поле из отображения в базе данных.
@Transient
private String tempData;


Пример полной конфигурации
import jakarta.persistence.*;

@Entity
@Table(name = "products")
public class Product {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = "product_name", nullable = false)
private String name;

private Double price;

@Transient
private String tempData;

// Getters and Setters
}


#Java #Training #Spring #Entity #Table #Id #GeneratedValue #Column #Transient
Аннотация @Table

Аннотация @Table используется в JPA (Java Persistence API) для указания деталей отображения сущности на таблицу в базе данных. Она применяется к классу, помеченному аннотацией @Entity, и позволяет задать имя таблицы, схему, каталог и другие параметры, связанные с таблицей в базе данных.

Аннотация @Table, как и @Entity, находится в пакете javax.persistence (для JPA 2.x и ниже) или jakarta.persistence (для JPA 3.x и выше). Импорт выглядит следующим образом:

Для JPA 2.x:
import javax.persistence.Table;


Для JPA 3.x:
import jakarta.persistence.Table;


Параметры аннотации

Аннотация @Table имеет несколько параметров, которые позволяют настроить отображение сущности на таблицу:

name:
Указывает имя таблицы в базе данных.
По умолчанию используется имя класса сущности.


Пример:
@Table(name = "users")


schema:
Указывает схему базы данных, в которой находится таблица.
По умолчанию используется схема по умолчанию для подключения к базе данных.


Пример:
@Table(name = "users", schema = "public")


catalog:
Указывает каталог базы данных, в котором находится таблица.
По умолчанию используется каталог по умолчанию для подключения к базе данных.


Пример:
@Table(name = "users", catalog = "my_catalog")


uniqueConstraints:
Позволяет задать уникальные ограничения для таблицы.
Принимает массив аннотаций @UniqueConstraint.

Пример:
@Table(name = "users", uniqueConstraints = {
@UniqueConstraint(columnNames = {"username"}),
@UniqueConstraint(columnNames = {"email"})
})


indexes:
Позволяет задать индексы для таблицы.
Принимает массив аннотаций
@Index.

Пример:
@Table(name = "users", indexes = {
@Index(name = "idx_username", columnList = "username"),
@Index(name = "idx_email", columnList = "email")
})


Механизмы Spring и JPA, связанные с @Table

Отображение сущности на таблицу:
Когда Spring Boot инициализирует JPA, он анализирует аннотацию @Table и создает метаданные для отображения сущности на таблицу в базе данных.
Если параметры name, schema или catalog не указаны, используются значения по умолчанию.


Генерация схемы базы данных:
Если параметр spring.jpa.hibernate.ddl-auto настроен на create, update или create-drop, Hibernate автоматически создаст или обновит таблицу в соответствии с аннотацией @Table.

Пример:
spring.jpa.hibernate.ddl-auto=update


Уникальные ограничения и индексы:
Уникальные ограничения и индексы, заданные через @Table, создаются в базе данных при генерации схемы.
Эти ограничения проверяются на уровне базы данных, что обеспечивает целостность данных.

Интеграция с EntityManager:
EntityManager использует метаданные, созданные на основе аннотации @Table, для выполнения операций с базой данных.
Например, при выполнении запроса SELECT * FROM users, EntityManager знает, что таблица users соответствует сущности User.


#Java #Training #Hard #Spring #SpringDataJPA #Table
Пример использования @Table
@Entity
@Table(
name = "users",
schema = "public",
catalog = "my_catalog",
uniqueConstraints = {
@UniqueConstraint(columnNames = {"username"}),
@UniqueConstraint(columnNames = {"email"})
},
indexes = {
@Index(name = "idx_username", columnList = "username"),
@Index(name = "idx_email", columnList = "email")
}
)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = "username", nullable = false, length = 50)
private String username;

@Column(name = "email", unique = true)
private String email;

// Геттеры и сеттеры
}


Настройки Spring Boot, влияющие на
@Table

Автоматическая генерация схемы:
Параметр spring.jpa.hibernate.ddl-auto определяет, как Hibernate управляет схемой базы данных.

Возможные значения:
none: Никаких изменений в схеме не вносится.
create: Схема создается заново при каждом запуске.
update: Схема обновляется в соответствии с сущностями.
create-drop: Схема создается при запуске и удаляется при завершении.
validate: Проверяется соответствие схемы сущностям.


Показ SQL-запросов:
Параметр spring.jpa.show-sql позволяет включить вывод SQL-запросов в консоль.

Пример:
spring.jpa.show-sql=true


Диалект базы данных:

Параметр spring.jpa.properties.hibernate.dialect определяет диалект базы данных.

Пример:
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect


#Java #Training #Hard #Spring #SpringDataJPA #Table