Основные аннотации JPA: @Entity, @Table, @Id
1. Аннотация @Entity
@Entity указывает, что класс представляет собой сущность базы данных. Каждая сущность соответствует таблице в базе данных.
Пример:
2. Аннотация @Table
@Table используется для настройки имени таблицы и схемы, к которой относится сущность.
Пример:
3. Аннотация @Id
@Id используется для указания первичного ключа таблицы.
Пример:
Другие полезные аннотации
1. @GeneratedValue
Используется вместе с @Id для автоматической генерации значения первичного ключа.
Стратегии генерации:
AUTO — автоматически выбирает стратегию, зависящую от базы данных.
IDENTITY — использует автоинкремент в базе данных.
SEQUENCE — использует специальную таблицу для генерации уникальных значений.
TABLE — сохраняет последовательности значений в отдельной таблице.
2. @Column
Позволяет указать имя столбца, его уникальность, длину и другие параметры.
3. @Transient
Позволяет исключить поле из отображения в базе данных.
Пример полной конфигурации
#Java #Training #Spring #Entity #Table #Id #GeneratedValue #Column #Transient
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:
Для JPA 3.x:
Параметры аннотации
Аннотация @Table имеет несколько параметров, которые позволяют настроить отображение сущности на таблицу:
name:
Указывает имя таблицы в базе данных.
По умолчанию используется имя класса сущности.
Пример:
schema:
Указывает схему базы данных, в которой находится таблица.
По умолчанию используется схема по умолчанию для подключения к базе данных.
Пример:
catalog:
Указывает каталог базы данных, в котором находится таблица.
По умолчанию используется каталог по умолчанию для подключения к базе данных.
Пример:
uniqueConstraints:
Позволяет задать уникальные ограничения для таблицы.
Принимает массив аннотаций @UniqueConstraint.
Пример:
indexes:
Позволяет задать индексы для таблицы.
Принимает массив аннотаций @Index.
Пример:
Механизмы Spring и JPA, связанные с @Table
Отображение сущности на таблицу:
Когда Spring Boot инициализирует JPA, он анализирует аннотацию @Table и создает метаданные для отображения сущности на таблицу в базе данных.
Если параметры name, schema или catalog не указаны, используются значения по умолчанию.
Генерация схемы базы данных:
Если параметр spring.jpa.hibernate.ddl-auto настроен на create, update или create-drop, Hibernate автоматически создаст или обновит таблицу в соответствии с аннотацией @Table.
Пример:
Уникальные ограничения и индексы:
Уникальные ограничения и индексы, заданные через @Table, создаются в базе данных при генерации схемы.
Эти ограничения проверяются на уровне базы данных, что обеспечивает целостность данных.
Интеграция с EntityManager:
EntityManager использует метаданные, созданные на основе аннотации @Table, для выполнения операций с базой данных.
Например, при выполнении запроса SELECT * FROM users, EntityManager знает, что таблица users соответствует сущности User.
#Java #Training #Hard #Spring #SpringDataJPA #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
Настройки Spring Boot, влияющие на @Table
Автоматическая генерация схемы:
Параметр spring.jpa.hibernate.ddl-auto определяет, как Hibernate управляет схемой базы данных.
Возможные значения:
none: Никаких изменений в схеме не вносится.
create: Схема создается заново при каждом запуске.
update: Схема обновляется в соответствии с сущностями.
create-drop: Схема создается при запуске и удаляется при завершении.
validate: Проверяется соответствие схемы сущностям.
Показ SQL-запросов:
Параметр spring.jpa.show-sql позволяет включить вывод SQL-запросов в консоль.
Пример:
Диалект базы данных:
Параметр spring.jpa.properties.hibernate.dialect определяет диалект базы данных.
Пример:
#Java #Training #Hard #Spring #SpringDataJPA #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