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
Аннотации JPA для полей: @Column, @GeneratedValue, @ManyToOne

1. Аннотация @Column

Аннотация @Column используется для настройки маппинга поля сущности на столбец таблицы базы данных. С её помощью можно задать имя столбца, его длину, уникальность, возможность быть NULL и другие атрибуты.

Основные параметры:
name — имя столбца в базе данных.
nullable — допускает ли столбец значение NULL.
unique — устанавливает, должны ли значения в столбце быть уникальными.
length — длина для столбцов типа VARCHAR.
columnDefinition — SQL-выражение для явного указания типа столбца.


Пример использования:
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class User {

@Id
private Long id;

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

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

@Column(name = "age", columnDefinition = "INTEGER DEFAULT 18")
private int age;

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


В этом примере мы видим, что:
Поле username будет связано со столбцом username, не допускающим NULL и с максимальной длиной 50 символов.
Поле age связано со столбцом с SQL-типом INTEGER, по умолчанию равным 18.


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

Аннотация @GeneratedValue используется для указания стратегии генерации значений первичного ключа. Она применима к полям, помеченным как @Id.

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


Пример использования:
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class Product {

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

private String name;

private double price;

// Геттеры и сеттеры
}
Здесь id будет автоматически генерироваться базой данных.


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

Аннотация @ManyToOne используется для определения связи "многие к одному". Она обозначает, что текущее поле является ссылкой на другую сущность.

Пример использования:
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToOne;

@Entity
public class Order {

@Id
private Long id;

private String description;

@ManyToOne
private Customer customer;

// Геттеры и сеттеры
}
Эта аннотация указывает, что множество заказов (Order) могут быть связаны с одним клиентом (Customer).


#Java #Training #Spring #Column #GeneratedValue #ManyToOne
Аннотация @Column

Аннотация @Column используется в Java Persistence API (JPA) для настройки сопоставления поля или свойства сущности с колонкой таблицы базы данных. Она находится в пакете javax.persistence (или jakarta.persistence в Jakarta EE). Эта аннотация позволяет задавать дополнительные параметры для колонки, такие как имя, возможность значения null, уникальность, длина и другие атрибуты.

Аннотация @Column принимает следующие параметры:
name: Имя колонки в таблице базы данных (по умолчанию используется имя поля или свойства).
unique: Указывает, должно ли значение в колонке быть уникальным (по умолчанию false).
nullable: Указывает, может ли колонка содержать значения null (по умолчанию true).
insertable: Указывает, включается ли колонка в SQL-запросы INSERT (по умолчанию true).
updatable: Указывает, включается ли колонка в SQL-запросы UPDATE (по умолчанию true).
length: Максимальная длина для строковых колонок (по умолчанию 255).
precision: Точность для числовых колонок (например, для DECIMAL).
scale: Масштаб для числовых колонок (например, количество знаков после запятой для DECIMAL).
columnDefinition: Позволяет задать SQL-определение колонки (например, VARCHAR(100) NOT NULL).
table: Указывает таблицу, к которой относится колонка (если сущность сопоставлена с несколькими таблицами).

Жизненный цикл

Аннотация @Column применяется на этапе загрузки метаданных сущности (во время инициализации контекста Spring или при развертывании приложения).

Параметры аннотации используются JPA-провайдером (например, Hibernate) для:
Создания схемы базы данных (если используется автоматическое создание таблиц).
Генерации SQL-запросов (например, INSERT, UPDATE, SELECT).
Валидации данных перед их сохранением в базу данных.


Механизмы Spring и настройки Spring Boot

Механизмы Spring, связанные с @Column
Spring Data JPA использует аннотацию @Column для интеграции с JPA-провайдером (например, Hibernate).
При старте приложения Spring Boot автоматически сканирует сущности, помеченные аннотацией
@Entity, и анализирует их поля, включая те, что помечены @Column.
Spring Boot настраивает EntityManagerFactory и DataSource, которые используются JPA для работы с базой данных.


Настройки Spring Boot, предшествующие работе @Column
Конфигурация источника данных (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 управляет созданием и обновлением схемы базы данных, включая таблицы и колонки.


#Java #Training #Hard #Spring #SpringDataJPA #Column
Обработка значений @Column

При создании или обновлении схемы базы данных, JPA-провайдер использует параметры аннотации @Column для определения типа и атрибутов колонки.
При выполнении SQL-запросов, JPA учитывает параметры insertable и updatable, чтобы определить, должна ли колонка участвовать в операции.
При валидации данных, JPA проверяет параметры nullable, length, precision и scale.


Варианты настройки

Кастомное именование колонок:
@Column(name = "user_name")
private String name;


Уникальные колонки:
@Column(unique = true)
private String email;


Непустые колонки:
@Column(nullable = false)
private String password;


Кастомное SQL-определение:
@Column(columnDefinition = "VARCHAR(100) NOT NULL")
private String name;


Пример использования

@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = "user_name", nullable = false, length = 100)
private String name;

@Column(unique = true, nullable = false)
private String email;

@Column(columnDefinition = "VARCHAR(255) NOT NULL")
private String password;

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


В этом примере:
Поле name сопоставляется с колонкой user_name, которая не может быть null и имеет максимальную длину 100 символов.
Поле email должно быть уникальным и не может быть null.
Поле password имеет кастомное SQL-определение.


#Java #Training #Hard #Spring #SpringDataJPA #Column