Основные аннотации 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
Аннотация @Transient
Аннотация @Transient используется в Java Persistence API (JPA) для указания того, что поле или свойство сущности не должно быть сохранено в базе данных. Она находится в пакете javax.persistence (или jakarta.persistence в Jakarta EE). Эта аннотация полезна, когда нужно временно хранить данные в объекте, которые не должны быть персистентными (например, вычисляемые поля или временные данные).
Аннотация @Transient не принимает никаких параметров. Она просто маркирует поле или свойство как не сохраняемое в базе данных.
Настройки и значения
Поскольку @Transient не имеет параметров, её настройка ограничивается выбором поля или свойства, которое не должно быть сохранено в базе данных.
Поле, помеченное @Transient, игнорируется JPA-провайдером (например, Hibernate) при выполнении операций с базой данных, таких как INSERT, UPDATE, SELECT и DELETE.
Жизненный цикл
Аннотация @Transient применяется на этапе загрузки метаданных сущности (во время инициализации контекста Spring или при развертывании приложения).
Поле, помеченное @Transient, не участвует в:
Создании схемы базы данных (если используется автоматическое создание таблиц).
Генерации SQL-запросов.
Валидации данных.
Механизмы Spring и настройки Spring Boot
Механизмы Spring, связанные с @Transient
Spring Data JPA использует аннотацию @Transient для интеграции с JPA-провайдером (например, Hibernate).
При старте приложения Spring Boot автоматически сканирует сущности, помеченные аннотацией @Entity, и анализирует их поля, включая те, что помечены @Transient.
Spring Boot настраивает EntityManagerFactory и DataSource, которые используются JPA для работы с базой данных.
Настройки Spring Boot, предшествующие работе @Transient
Конфигурация источника данных (DataSource):
Spring Boot автоматически настраивает DataSource на основе свойств, указанных в application.properties или application.yml.
Например:
Конфигурация JPA:
Spring Boot автоматически настраивает JPA через свойства, такие как:
Обработка значений @Transient
Поле, помеченное @Transient, игнорируется JPA-провайдером при выполнении операций с базой данных.
Значение поля может быть установлено и использовано в коде приложения, но оно не будет сохранено в базе данных.
Варианты настройки
Использование @Transient для вычисляемых полей:
В этом примере поле age вычисляется на основе даты рождения и не сохраняется в базе данных.
Использование @Transient для временных данных:
#Java #Training #Hard #Spring #SpringDataJPA #Transient
Аннотация @Transient используется в Java Persistence API (JPA) для указания того, что поле или свойство сущности не должно быть сохранено в базе данных. Она находится в пакете javax.persistence (или jakarta.persistence в Jakarta EE). Эта аннотация полезна, когда нужно временно хранить данные в объекте, которые не должны быть персистентными (например, вычисляемые поля или временные данные).
Аннотация @Transient не принимает никаких параметров. Она просто маркирует поле или свойство как не сохраняемое в базе данных.
Настройки и значения
Поскольку @Transient не имеет параметров, её настройка ограничивается выбором поля или свойства, которое не должно быть сохранено в базе данных.
Поле, помеченное @Transient, игнорируется JPA-провайдером (например, Hibernate) при выполнении операций с базой данных, таких как INSERT, UPDATE, SELECT и DELETE.
Жизненный цикл
Аннотация @Transient применяется на этапе загрузки метаданных сущности (во время инициализации контекста Spring или при развертывании приложения).
Поле, помеченное @Transient, не участвует в:
Создании схемы базы данных (если используется автоматическое создание таблиц).
Генерации SQL-запросов.
Валидации данных.
Механизмы Spring и настройки Spring Boot
Механизмы Spring, связанные с @Transient
Spring Data JPA использует аннотацию @Transient для интеграции с JPA-провайдером (например, Hibernate).
При старте приложения Spring Boot автоматически сканирует сущности, помеченные аннотацией @Entity, и анализирует их поля, включая те, что помечены @Transient.
Spring Boot настраивает EntityManagerFactory и DataSource, которые используются JPA для работы с базой данных.
Настройки Spring Boot, предшествующие работе @Transient
Конфигурация источника данных (DataSource):
Spring Boot автоматически настраивает DataSource на основе свойств, указанных в application.properties или application.yml.
Например:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
Эти настройки необходимы для подключения к базе данных, где хранятся сущности.
Конфигурация JPA:
Spring Boot автоматически настраивает JPA через свойства, такие как:
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
Свойство spring.jpa.hibernate.ddl-auto управляет созданием и обновлением схемы базы данных.
Обработка значений @Transient
Поле, помеченное @Transient, игнорируется JPA-провайдером при выполнении операций с базой данных.
Значение поля может быть установлено и использовано в коде приложения, но оно не будет сохранено в базе данных.
Варианты настройки
Использование @Transient для вычисляемых полей:
@Transient
private int age;
public int getAge() {
return Period.between(birthDate, LocalDate.now()).getYears();
}
В этом примере поле age вычисляется на основе даты рождения и не сохраняется в базе данных.
Использование @Transient для временных данных:
@Transient
private String temporaryData;
В этом примере поле temporaryData используется для временного хранения данных в объекте.
#Java #Training #Hard #Spring #SpringDataJPA #Transient