Основные аннотации 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
Аннотации JPA для полей: @Column, @GeneratedValue, @ManyToOne
1. Аннотация @Column
Аннотация @Column используется для настройки маппинга поля сущности на столбец таблицы базы данных. С её помощью можно задать имя столбца, его длину, уникальность, возможность быть NULL и другие атрибуты.
Основные параметры:
name — имя столбца в базе данных.
nullable — допускает ли столбец значение NULL.
unique — устанавливает, должны ли значения в столбце быть уникальными.
length — длина для столбцов типа VARCHAR.
columnDefinition — SQL-выражение для явного указания типа столбца.
Пример использования:
В этом примере мы видим, что:
Поле username будет связано со столбцом username, не допускающим NULL и с максимальной длиной 50 символов.
Поле age связано со столбцом с SQL-типом INTEGER, по умолчанию равным 18.
2. Аннотация @GeneratedValue
Аннотация @GeneratedValue используется для указания стратегии генерации значений первичного ключа. Она применима к полям, помеченным как @Id.
Основные стратегии:
AUTO — выбор стратегии определяется провайдером JPA.
IDENTITY — генерация значения средствами базы данных.
SEQUENCE — использование последовательности, определенной в базе данных.
TABLE — использование таблицы для хранения значений идентификаторов.
Пример использования:
3. Аннотация @ManyToOne
Аннотация @ManyToOne используется для определения связи "многие к одному". Она обозначает, что текущее поле является ссылкой на другую сущность.
Пример использования:
#Java #Training #Spring #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.
Например:
Конфигурация JPA:
Spring Boot автоматически настраивает JPA через свойства, такие как:
#Java #Training #Hard #Spring #SpringDataJPA #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.
Варианты настройки
Кастомное именование колонок:
Уникальные колонки:
Непустые колонки:
Кастомное SQL-определение:
Пример использования
В этом примере:
Поле name сопоставляется с колонкой user_name, которая не может быть null и имеет максимальную длину 100 символов.
Поле email должно быть уникальным и не может быть null.
Поле password имеет кастомное SQL-определение.
#Java #Training #Hard #Spring #SpringDataJPA #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