Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩💻
Какой метод используется для удаления пробелов в начале и конце строки?
Какой метод используется для удаления пробелов в начале и конце строки?
Anonymous Quiz
20%
removeSpaces()
4%
cut()
61%
trim()
15%
strip()
Аннотация @GeneratedValue
Аннотация @GeneratedValue используется в Java Persistence API (JPA) для указания стратегии генерации значений первичного ключа (primary key) для сущности. Она применяется совместно с аннотацией @Id и находится в пакете javax.persistence (или jakarta.persistence в Jakarta EE). Эта аннотация позволяет автоматически генерировать уникальные значения для первичных ключей, что упрощает управление идентификаторами в базе данных.
Аннотация @GeneratedValue принимает два необязательных параметра:
strategy: Определяет стратегию генерации значений. Тип данных — GenerationType.
generator: Указывает имя генератора, который используется для создания значений. Тип данных — String.
Настройки и значения
Параметр strategy:
Определяет, как будут генерироваться значения первичного ключа.
Доступные стратегии:
GenerationType.AUTO (по умолчанию): JPA автоматически выбирает подходящую стратегию на основе используемой базы данных.
GenerationType.IDENTITY: Использует встроенный механизм автоинкремента базы данных (например, AUTO_INCREMENT в MySQL или SERIAL в PostgreSQL).
GenerationType.SEQUENCE: Использует последовательность (sequence) базы данных для генерации значений.
GenerationType.TABLE: Использует отдельную таблицу для хранения и генерации значений первичных ключей.
Параметр generator:
Указывает имя генератора, который должен быть определён с помощью аннотации @SequenceGenerator или @TableGenerator. Это позволяет настроить дополнительные параметры для генерации значений.
Жизненный цикл
Аннотация @GeneratedValue применяется на этапе загрузки метаданных сущности (во время инициализации контекста Spring или при развертывании приложения).
Значение для поля, помеченного @GeneratedValue, генерируется:
При вставке новой сущности в базу данных (persist).
В зависимости от стратегии, значение может генерироваться базой данных или JPA-провайдером (например, Hibernate).
Механизмы Spring и настройки Spring Boot
Spring Data JPA использует аннотацию @GeneratedValue для интеграции с JPA-провайдером (например, Hibernate).
При старте приложения Spring Boot автоматически сканирует сущности, помеченные аннотацией @Entity, и анализирует их поля, включая те, что помечены @Id и @GeneratedValue.
Spring Boot настраивает EntityManagerFactory и DataSource, которые используются JPA для работы с базой данных.
Настройки Spring Boot, предшествующие работе @GeneratedValue
Конфигурация источника данных (DataSource):
Spring Boot автоматически настраивает DataSource на основе свойств, указанных в application.properties или application.yml.
Например:
Конфигурация JPA:
Spring Boot автоматически настраивает JPA через свойства, такие как:
#Java #Training #Hard #Spring #SpringDataJPA #GeneratedValue
Аннотация @GeneratedValue используется в Java Persistence API (JPA) для указания стратегии генерации значений первичного ключа (primary key) для сущности. Она применяется совместно с аннотацией @Id и находится в пакете javax.persistence (или jakarta.persistence в Jakarta EE). Эта аннотация позволяет автоматически генерировать уникальные значения для первичных ключей, что упрощает управление идентификаторами в базе данных.
Аннотация @GeneratedValue принимает два необязательных параметра:
strategy: Определяет стратегию генерации значений. Тип данных — GenerationType.
generator: Указывает имя генератора, который используется для создания значений. Тип данных — String.
Настройки и значения
Параметр strategy:
Определяет, как будут генерироваться значения первичного ключа.
Доступные стратегии:
GenerationType.AUTO (по умолчанию): JPA автоматически выбирает подходящую стратегию на основе используемой базы данных.
GenerationType.IDENTITY: Использует встроенный механизм автоинкремента базы данных (например, AUTO_INCREMENT в MySQL или SERIAL в PostgreSQL).
GenerationType.SEQUENCE: Использует последовательность (sequence) базы данных для генерации значений.
GenerationType.TABLE: Использует отдельную таблицу для хранения и генерации значений первичных ключей.
Параметр generator:
Указывает имя генератора, который должен быть определён с помощью аннотации @SequenceGenerator или @TableGenerator. Это позволяет настроить дополнительные параметры для генерации значений.
Жизненный цикл
Аннотация @GeneratedValue применяется на этапе загрузки метаданных сущности (во время инициализации контекста Spring или при развертывании приложения).
Значение для поля, помеченного @GeneratedValue, генерируется:
При вставке новой сущности в базу данных (persist).
В зависимости от стратегии, значение может генерироваться базой данных или JPA-провайдером (например, Hibernate).
Механизмы Spring и настройки Spring Boot
Spring Data JPA использует аннотацию @GeneratedValue для интеграции с JPA-провайдером (например, Hibernate).
При старте приложения Spring Boot автоматически сканирует сущности, помеченные аннотацией @Entity, и анализирует их поля, включая те, что помечены @Id и @GeneratedValue.
Spring Boot настраивает EntityManagerFactory и DataSource, которые используются JPA для работы с базой данных.
Настройки Spring Boot, предшествующие работе @GeneratedValue
Конфигурация источника данных (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 #GeneratedValue
Обработка значений @GeneratedValue
При вставке новой сущности (persist), JPA проверяет, что поле, помеченное @Id и @GeneratedValue, имеет значение null.
В зависимости от стратегии, значение генерируется:
GenerationType.IDENTITY: Значение генерируется базой данных, и JPA получает его после выполнения вставки.
GenerationType.SEQUENCE: JPA запрашивает следующее значение из последовательности базы данных перед вставкой.
GenerationType.TABLE: JPA использует отдельную таблицу для генерации значений.
GenerationType.AUTO: JPA выбирает подходящую стратегию на основе базы данных.
Варианты настройки
Использование @SequenceGenerator:
Если используется стратегия GenerationType.SEQUENCE, можно настроить последовательность с помощью аннотации @SequenceGenerator.
Например:
Параметры @SequenceGenerator:
name: Имя генератора.
sequenceName: Имя последовательности в базе данных.
allocationSize: Количество значений, которые будут предварительно выделены.
Использование @TableGenerator:
Если используется стратегия GenerationType.TABLE, можно настроить таблицу для генерации значений с помощью аннотации @TableGenerator.
Например:
Параметры @TableGenerator:
name: Имя генератора.
table: Имя таблицы для хранения значений.
pkColumnName: Имя столбца, хранящего имена генераторов.
valueColumnName: Имя столбца, хранящего значения.
Пример использования
В этом примере:
Поле id помечено аннотацией @Id и @GeneratedValue.
Стратегия GenerationType.IDENTITY указывает, что значение id будет генерироваться базой данных автоматически.
#Java #Training #Hard #Spring #SpringDataJPA #GeneratedValue
При вставке новой сущности (persist), JPA проверяет, что поле, помеченное @Id и @GeneratedValue, имеет значение null.
В зависимости от стратегии, значение генерируется:
GenerationType.IDENTITY: Значение генерируется базой данных, и JPA получает его после выполнения вставки.
GenerationType.SEQUENCE: JPA запрашивает следующее значение из последовательности базы данных перед вставкой.
GenerationType.TABLE: JPA использует отдельную таблицу для генерации значений.
GenerationType.AUTO: JPA выбирает подходящую стратегию на основе базы данных.
Варианты настройки
Использование @SequenceGenerator:
Если используется стратегия GenerationType.SEQUENCE, можно настроить последовательность с помощью аннотации @SequenceGenerator.
Например:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_seq")
@SequenceGenerator(name = "user_seq", sequenceName = "USER_SEQ", allocationSize = 1)
private Long id;
Параметры @SequenceGenerator:
name: Имя генератора.
sequenceName: Имя последовательности в базе данных.
allocationSize: Количество значений, которые будут предварительно выделены.
Использование @TableGenerator:
Если используется стратегия GenerationType.TABLE, можно настроить таблицу для генерации значений с помощью аннотации @TableGenerator.
Например:
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "user_table_gen")
@TableGenerator(name = "user_table_gen", table = "ID_GEN", pkColumnName = "GEN_NAME", valueColumnName = "GEN_VALUE")
private Long id;
Параметры @TableGenerator:
name: Имя генератора.
table: Имя таблицы для хранения значений.
pkColumnName: Имя столбца, хранящего имена генераторов.
valueColumnName: Имя столбца, хранящего значения.
Пример использования
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// Геттеры и сеттеры
}
В этом примере:
Поле id помечено аннотацией @Id и @GeneratedValue.
Стратегия GenerationType.IDENTITY указывает, что значение id будет генерироваться базой данных автоматически.
#Java #Training #Hard #Spring #SpringDataJPA #GeneratedValue
This media is not supported in your browser
VIEW IN TELEGRAM
#Mems. Когда передвигаешь таски на следующий спринт.
Аннотация @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
Что выведет код?
#Tasks
import java.util.function.Function;
public class Task040325 {
public static void main(String[] args) {
Function<Integer, Integer> add = x -> x + 1;
Function<Integer, Integer> multiply = x -> x * 2;
Function<Integer, Integer> combined = add.andThen(multiply).compose(multiply);
System.out.println(combined.apply(3));
}
}
#Tasks
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩💻
Какой метод используется для проверки, содержит ли строка подстроку?
Какой метод используется для проверки, содержит ли строка подстроку?
Anonymous Quiz
9%
find()
18%
indexOf()
70%
contains()
4%
search()
Аннотация @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
Аннотация @Enumerated
Аннотация @Enumerated используется в Java Persistence API (JPA) для указания способа маппинга (отображения) перечислений (enum) на базу данных. Она находится в пакете javax.persistence (или jakarta.persistence, если используется Jakarta EE). Эта аннотация применяется к полям или свойствам сущности, которые являются перечислениями, и определяет, как значение перечисления будет сохраняться в базе данных.
Аннотация @Enumerated принимает один параметр — value, который определяет тип маппинга перечисления.
Параметр value может принимать одно из двух значений:
EnumType.ORDINAL:
Перечисление сохраняется в базе данных как целое число (индекс значения перечисления).
Например, если у вас есть перечисление Status { ACTIVE, INACTIVE, PENDING }, то ACTIVE будет сохранено как 0, INACTIVE — как 1, PENDING — как 2.
Недостаток: если порядок значений в перечислении изменится, это может привести к ошибкам в данных.
EnumType.STRING:
Перечисление сохраняется в базе данных как строка (имя значения перечисления).
Например, ACTIVE будет сохранено как строка "ACTIVE".
Преимущество: такой подход более устойчив к изменениям в перечислении, так как не зависит от порядка значений.
Пример использования:
Если аннотация @Enumerated не указана, JPA по умолчанию использует EnumType.ORDINAL.
Жизненный цикл
Применение: Аннотация @Enumerated применяется на этапе маппинга сущности JPA. Она используется при создании таблиц в базе данных (если используется автоматическая генерация схемы) и при выполнении операций чтения/записи данных.
Инициализация: При загрузке сущности из базы данных JPA использует указанный тип маппинга (ORDINAL или STRING) для преобразования данных в соответствующее значение перечисления.
Уничтожение: При сохранении сущности в базу данных JPA преобразует значение перечисления в указанный тип данных (число или строку).
Механизмы Spring и настройки Spring Boot
JPA и Hibernate: Spring Data JPA использует провайдеров JPA (например, Hibernate) для работы с базой данных. Аннотация @Enumerated обрабатывается на уровне JPA, а не Spring, но Spring обеспечивает интеграцию с JPA через EntityManager и репозитории.
Маппинг сущностей: Spring Data JPA автоматически маппит сущности на таблицы базы данных, используя аннотации JPA, включая @Enumerated.
#Java #Training #Hard #Spring #SpringDataJPA #Enumerated
Аннотация @Enumerated используется в Java Persistence API (JPA) для указания способа маппинга (отображения) перечислений (enum) на базу данных. Она находится в пакете javax.persistence (или jakarta.persistence, если используется Jakarta EE). Эта аннотация применяется к полям или свойствам сущности, которые являются перечислениями, и определяет, как значение перечисления будет сохраняться в базе данных.
Аннотация @Enumerated принимает один параметр — value, который определяет тип маппинга перечисления.
Параметр value может принимать одно из двух значений:
EnumType.ORDINAL:
Перечисление сохраняется в базе данных как целое число (индекс значения перечисления).
Например, если у вас есть перечисление Status { ACTIVE, INACTIVE, PENDING }, то ACTIVE будет сохранено как 0, INACTIVE — как 1, PENDING — как 2.
Недостаток: если порядок значений в перечислении изменится, это может привести к ошибкам в данных.
EnumType.STRING:
Перечисление сохраняется в базе данных как строка (имя значения перечисления).
Например, ACTIVE будет сохранено как строка "ACTIVE".
Преимущество: такой подход более устойчив к изменениям в перечислении, так как не зависит от порядка значений.
Пример использования:
@Enumerated(EnumType.STRING)
private Status status;
Если аннотация @Enumerated не указана, JPA по умолчанию использует EnumType.ORDINAL.
Жизненный цикл
Применение: Аннотация @Enumerated применяется на этапе маппинга сущности JPA. Она используется при создании таблиц в базе данных (если используется автоматическая генерация схемы) и при выполнении операций чтения/записи данных.
Инициализация: При загрузке сущности из базы данных JPA использует указанный тип маппинга (ORDINAL или STRING) для преобразования данных в соответствующее значение перечисления.
Уничтожение: При сохранении сущности в базу данных JPA преобразует значение перечисления в указанный тип данных (число или строку).
Механизмы Spring и настройки Spring Boot
JPA и Hibernate: Spring Data JPA использует провайдеров JPA (например, Hibernate) для работы с базой данных. Аннотация @Enumerated обрабатывается на уровне JPA, а не Spring, но Spring обеспечивает интеграцию с JPA через EntityManager и репозитории.
Маппинг сущностей: Spring Data JPA автоматически маппит сущности на таблицы базы данных, используя аннотации JPA, включая @Enumerated.
#Java #Training #Hard #Spring #SpringDataJPA #Enumerated
Настройки Spring Boot
Spring Boot упрощает настройку JPA через свойства конфигурации. Вот несколько ключевых настроек, которые могут влиять на работу @Enumerated:
Если используется автоматическая генерация схемы (например, через Hibernate), Spring Boot настраивает это через свойство:
В этом случае Hibernate создаст столбец для перечисления с типом данных, соответствующим EnumType (например, INT для ORDINAL или VARCHAR для STRING).
Настройки Hibernate:
Spring Boot позволяет настраивать Hibernate через свойства, например:
Эти настройки не влияют напрямую на @Enumerated, но могут помочь в отладке SQL-запросов, связанных с маппингом перечислений.
Кастомизация маппинга:
Если требуется кастомизировать маппинг перечислений (например, использовать собственные преобразователи), можно использовать аннотацию @Converter или реализовать интерфейс AttributeConverter.
Пример кастомизации через @Converter:
Варианты настройки
Использование EnumType.ORDINAL:
Подходит для случаев, когда порядок значений перечисления фиксирован и не будет изменяться.
Экономит место в базе данных, так как хранится как число.
Использование EnumType.STRING:
Рекомендуется для случаев, когда порядок значений перечисления может измениться.
Удобно для чтения данных напрямую из базы данных, так как значения хранятся в виде строк.
Кастомизация через @Converter:
Позволяет гибко настраивать маппинг перечислений, например, сохранять значения в нижнем регистре или использовать собственные форматы.
#Java #Training #Hard #Spring #SpringDataJPA #Enumerated
Spring Boot упрощает настройку JPA через свойства конфигурации. Вот несколько ключевых настроек, которые могут влиять на работу @Enumerated:
Если используется автоматическая генерация схемы (например, через Hibernate), Spring Boot настраивает это через свойство:
spring.jpa.hibernate.ddl-auto=update
В этом случае Hibernate создаст столбец для перечисления с типом данных, соответствующим EnumType (например, INT для ORDINAL или VARCHAR для STRING).
Настройки Hibernate:
Spring Boot позволяет настраивать Hibernate через свойства, например:
spring.jpa.properties.hibernate.format_sql=true
Эти настройки не влияют напрямую на @Enumerated, но могут помочь в отладке SQL-запросов, связанных с маппингом перечислений.
Кастомизация маппинга:
Если требуется кастомизировать маппинг перечислений (например, использовать собственные преобразователи), можно использовать аннотацию @Converter или реализовать интерфейс AttributeConverter.
Пример кастомизации через @Converter:
@Converter(autoApply = true)
public class StatusConverter implements AttributeConverter<Status, String> {
@Override
public String convertToDatabaseColumn(Status status) {
return status.name().toLowerCase();
}
@Override
public Status convertToEntityAttribute(String dbData) {
return Status.valueOf(dbData.toUpperCase());
}
}
Варианты настройки
Использование EnumType.ORDINAL:
Подходит для случаев, когда порядок значений перечисления фиксирован и не будет изменяться.
Экономит место в базе данных, так как хранится как число.
Использование EnumType.STRING:
Рекомендуется для случаев, когда порядок значений перечисления может измениться.
Удобно для чтения данных напрямую из базы данных, так как значения хранятся в виде строк.
Кастомизация через @Converter:
Позволяет гибко настраивать маппинг перечислений, например, сохранять значения в нижнем регистре или использовать собственные форматы.
#Java #Training #Hard #Spring #SpringDataJPA #Enumerated
Что выведет код?
#Tasks
public class Task050325 {
public static void main(String[] args) {
String text = "apple, banana; cherry grape";
String[] parts = text.split("[,; ]");
System.out.println(parts.length);
}
}
#Tasks