Java for Beginner
672 subscribers
541 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
Аннотация @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