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
И обычно в этот момент QA зовет разработчика, а сам сваливает 🤪 🫡
https://t.me/Java_for_beginner_dev
#Mems
https://t.me/Java_for_beginner_dev
#Mems
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩💻
Какой метод используется для преобразования строки в верхний регистр?
Какой метод используется для преобразования строки в верхний регистр?
Anonymous Quiz
7%
toLowerCase()
82%
toUpperCase()
7%
toUpper()
4%
convertToUpper()
Аннотация @Temporal
Аннотация @Temporal используется в Java Persistence API (JPA) для указания способа маппинга (отображения) временных типов данных (например, java.util.Date или java.util.Calendar) на соответствующие типы данных в базе данных. Она находится в пакете javax.persistence (или jakarta.persistence, если используется Jakarta EE). Эта аннотация применяется к полям или свойствам сущности, которые представляют дату или время.
Аннотация @Temporal принимает один параметр — value, который определяет тип временных данных, сохраняемых в базе данных.
Параметр value может принимать одно из следующих значений:
TemporalType.DATE:
Сохраняет только дату (год, месяц, день) без времени.
В базе данных это обычно маппится на тип DATE.
TemporalType.TIME:
Сохраняет только время (часы, минуты, секунды) без даты.
В базе данных это обычно маппится на тип TIME.
TemporalType.TIMESTAMP:
Сохраняет и дату, и время.
В базе данных это обычно маппится на тип TIMESTAMP.
Пример использования:
Если аннотация @Temporal не указана, JPA по умолчанию использует TemporalType.TIMESTAMP для полей типа java.util.Date и java.util.Calendar.
Жизненный цикл
Применение: Аннотация @Temporal применяется на этапе маппинга сущности JPA. Она используется при создании таблиц в базе данных (если используется автоматическая генерация схемы) и при выполнении операций чтения/записи данных.
Инициализация: При загрузке сущности из базы данных JPA использует указанный тип маппинга (DATE, TIME или TIMESTAMP) для преобразования данных в соответствующий временной тип Java.
Уничтожение: При сохранении сущности в базу данных JPA преобразует значение временного типа Java в указанный тип данных базы данных.
Механизмы Spring и настройки Spring Boot
JPA и Hibernate: Spring Data JPA использует провайдеров JPA (например, Hibernate) для работы с базой данных. Аннотация @Temporal обрабатывается на уровне JPA, но Spring обеспечивает интеграцию с JPA через EntityManager и репозитории.
Маппинг сущностей: Spring Data JPA автоматически маппит сущности на таблицы базы данных, используя аннотации JPA, включая @Temporal.
Настройки Spring Boot
Spring Boot упрощает настройку JPA через свойства конфигурации.
Вот несколько ключевых настроек, которые могут влиять на работу @Temporal:
Генерация схемы базы данных:
Если используется автоматическая генерация схемы (например, через Hibernate), Spring Boot настраивает это через свойство:
В этом случае Hibernate создаст столбец для временного типа с типом данных, соответствующим TemporalType (например, DATE, TIME или TIMESTAMP).
Настройки Hibernate:
Spring Boot позволяет настраивать Hibernate через свойства, например:
Эти настройки не влияют напрямую на @Temporal, но могут помочь в отладке SQL-запросов, связанных с маппингом временных типов.
Использование java.time (JSR-310):
Начиная с Java 8, рекомендуется использовать типы из пакета java.time (например, LocalDate, LocalTime, LocalDateTime), которые не требуют аннотации @Temporal. Spring Data JPA и Hibernate автоматически маппят эти типы на соответствующие типы базы данных.
Пример использования java.time:
Варианты настройки
Использование java.time:
Рекомендуется для новых приложений, так как типы java.time более современны и не требуют аннотации @Temporal.
#Java #Training #Hard #Spring #SpringDataJPA #Temporal
Аннотация @Temporal используется в Java Persistence API (JPA) для указания способа маппинга (отображения) временных типов данных (например, java.util.Date или java.util.Calendar) на соответствующие типы данных в базе данных. Она находится в пакете javax.persistence (или jakarta.persistence, если используется Jakarta EE). Эта аннотация применяется к полям или свойствам сущности, которые представляют дату или время.
Аннотация @Temporal принимает один параметр — value, который определяет тип временных данных, сохраняемых в базе данных.
Параметр value может принимать одно из следующих значений:
TemporalType.DATE:
Сохраняет только дату (год, месяц, день) без времени.
В базе данных это обычно маппится на тип DATE.
TemporalType.TIME:
Сохраняет только время (часы, минуты, секунды) без даты.
В базе данных это обычно маппится на тип TIME.
TemporalType.TIMESTAMP:
Сохраняет и дату, и время.
В базе данных это обычно маппится на тип TIMESTAMP.
Пример использования:
@Temporal(TemporalType.DATE)
private Date birthDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastUpdated;
Если аннотация @Temporal не указана, JPA по умолчанию использует TemporalType.TIMESTAMP для полей типа java.util.Date и java.util.Calendar.
Жизненный цикл
Применение: Аннотация @Temporal применяется на этапе маппинга сущности JPA. Она используется при создании таблиц в базе данных (если используется автоматическая генерация схемы) и при выполнении операций чтения/записи данных.
Инициализация: При загрузке сущности из базы данных JPA использует указанный тип маппинга (DATE, TIME или TIMESTAMP) для преобразования данных в соответствующий временной тип Java.
Уничтожение: При сохранении сущности в базу данных JPA преобразует значение временного типа Java в указанный тип данных базы данных.
Механизмы Spring и настройки Spring Boot
JPA и Hibernate: Spring Data JPA использует провайдеров JPA (например, Hibernate) для работы с базой данных. Аннотация @Temporal обрабатывается на уровне JPA, но Spring обеспечивает интеграцию с JPA через EntityManager и репозитории.
Маппинг сущностей: Spring Data JPA автоматически маппит сущности на таблицы базы данных, используя аннотации JPA, включая @Temporal.
Настройки Spring Boot
Spring Boot упрощает настройку JPA через свойства конфигурации.
Вот несколько ключевых настроек, которые могут влиять на работу @Temporal:
Генерация схемы базы данных:
Если используется автоматическая генерация схемы (например, через Hibernate), Spring Boot настраивает это через свойство:
spring.jpa.hibernate.ddl-auto=update
В этом случае Hibernate создаст столбец для временного типа с типом данных, соответствующим TemporalType (например, DATE, TIME или TIMESTAMP).
Настройки Hibernate:
Spring Boot позволяет настраивать Hibernate через свойства, например:
spring.jpa.properties.hibernate.format_sql=true
Эти настройки не влияют напрямую на @Temporal, но могут помочь в отладке SQL-запросов, связанных с маппингом временных типов.
Использование java.time (JSR-310):
Начиная с Java 8, рекомендуется использовать типы из пакета java.time (например, LocalDate, LocalTime, LocalDateTime), которые не требуют аннотации @Temporal. Spring Data JPA и Hibernate автоматически маппят эти типы на соответствующие типы базы данных.
Пример использования java.time:
private LocalDate birthDate;
private LocalDateTime lastUpdated;
Варианты настройки
Использование java.time:
Рекомендуется для новых приложений, так как типы java.time более современны и не требуют аннотации @Temporal.
#Java #Training #Hard #Spring #SpringDataJPA #Temporal
Аннотация @Lob
Аннотация @Lob (Large Object) используется в Java Persistence API (JPA) для маппинга (отображения) больших объектов данных, таких как большие текстовые поля (CLOB) или бинарные данные (BLOB), на соответствующие типы данных в базе данных. Она находится в пакете javax.persistence (или jakarta.persistence, если используется Jakarta EE). Эта аннотация применяется к полям или свойствам сущности, которые представляют большие объекты.
Аннотация @Lob не принимает параметров. Она используется как маркер для указания, что поле должно быть маппировано как большой объект. Тип поля определяет, будет ли это CLOB (Character Large Object) или BLOB (Binary Large Object):
Для текстовых данных:
Если поле имеет тип String или char[], оно будет маппировано как CLOB.
Для бинарных данных:
Если поле имеет тип byte[] или Byte[], оно будет маппировано как BLOB.
Для сериализованных объектов:
Если поле имеет тип, реализующий Serializable, оно также может быть маппировано как BLOB.
Если аннотация @Lob не указана, JPA будет использовать стандартные типы данных для маппинга полей (например, VARCHAR для String или VARBINARY для byte[]), что может привести к ограничениям на размер данных.
Жизненный цикл
Применение: Аннотация @Lob применяется на этапе маппинга сущности JPA. Она используется при создании таблиц в базе данных (если используется автоматическая генерация схемы) и при выполнении операций чтения/записи данных.
Инициализация: При загрузке сущности из базы данных JPA использует указанный тип большого объекта (CLOB или BLOB) для преобразования данных в соответствующий тип Java.
Уничтожение: При сохранении сущности в базу данных JPA преобразует значение большого объекта Java в соответствующий тип данных базы данных (CLOB или BLOB).
Механизмы Spring и настройки Spring Boot
Механизмы Spring
JPA и Hibernate: Spring Data JPA использует провайдеров JPA (например, Hibernate) для работы с базой данных. Аннотация @Lob обрабатывается на уровне JPA, но Spring обеспечивает интеграцию с JPA через EntityManager и репозитории.
Маппинг сущностей: Spring Data JPA автоматически маппит сущности на таблицы базы данных, используя аннотации JPA, включая @Lob.
Настройки Spring Boot
Spring Boot упрощает настройку JPA через свойства конфигурации. Вот несколько ключевых настроек, которые могут влиять на работу @Lob:
Генерация схемы базы данных:
Если используется автоматическая генерация схемы (например, через Hibernate), Spring Boot настраивает это через свойство:
В этом случае Hibernate создаст столбец для большого объекта с типом данных, соответствующим CLOB или BLOB.
Настройки Hibernate:
Spring Boot позволяет настраивать Hibernate через свойства, например:
Использование @Column для уточнения размера:
Для больших текстовых полей можно использовать аннотацию @Column с параметром length, чтобы указать максимальный размер:
Использование @Basic для ленивой загрузки:
Для оптимизации производительности можно использовать аннотацию @Basic с параметром fetch = FetchType.LAZY, чтобы загружать большие объекты только при необходимости:
#Java #Training #Hard #Spring #SpringDataJPA #Lob
Аннотация @Lob (Large Object) используется в Java Persistence API (JPA) для маппинга (отображения) больших объектов данных, таких как большие текстовые поля (CLOB) или бинарные данные (BLOB), на соответствующие типы данных в базе данных. Она находится в пакете javax.persistence (или jakarta.persistence, если используется Jakarta EE). Эта аннотация применяется к полям или свойствам сущности, которые представляют большие объекты.
Аннотация @Lob не принимает параметров. Она используется как маркер для указания, что поле должно быть маппировано как большой объект. Тип поля определяет, будет ли это CLOB (Character Large Object) или BLOB (Binary Large Object):
Для текстовых данных:
Если поле имеет тип String или char[], оно будет маппировано как CLOB.
Для бинарных данных:
Если поле имеет тип byte[] или Byte[], оно будет маппировано как BLOB.
Для сериализованных объектов:
Если поле имеет тип, реализующий Serializable, оно также может быть маппировано как BLOB.
Если аннотация @Lob не указана, JPA будет использовать стандартные типы данных для маппинга полей (например, VARCHAR для String или VARBINARY для byte[]), что может привести к ограничениям на размер данных.
Жизненный цикл
Применение: Аннотация @Lob применяется на этапе маппинга сущности JPA. Она используется при создании таблиц в базе данных (если используется автоматическая генерация схемы) и при выполнении операций чтения/записи данных.
Инициализация: При загрузке сущности из базы данных JPA использует указанный тип большого объекта (CLOB или BLOB) для преобразования данных в соответствующий тип Java.
Уничтожение: При сохранении сущности в базу данных JPA преобразует значение большого объекта Java в соответствующий тип данных базы данных (CLOB или BLOB).
Механизмы Spring и настройки Spring Boot
Механизмы Spring
JPA и Hibernate: Spring Data JPA использует провайдеров JPA (например, Hibernate) для работы с базой данных. Аннотация @Lob обрабатывается на уровне JPA, но Spring обеспечивает интеграцию с JPA через EntityManager и репозитории.
Маппинг сущностей: Spring Data JPA автоматически маппит сущности на таблицы базы данных, используя аннотации JPA, включая @Lob.
Настройки Spring Boot
Spring Boot упрощает настройку JPA через свойства конфигурации. Вот несколько ключевых настроек, которые могут влиять на работу @Lob:
Генерация схемы базы данных:
Если используется автоматическая генерация схемы (например, через Hibernate), Spring Boot настраивает это через свойство:
spring.jpa.hibernate.ddl-auto=update
В этом случае Hibernate создаст столбец для большого объекта с типом данных, соответствующим CLOB или BLOB.
Настройки Hibernate:
Spring Boot позволяет настраивать Hibernate через свойства, например:
spring.jpa.properties.hibernate.format_sql=true
Эти настройки не влияют напрямую на @Lob, но могут помочь в отладке SQL-запросов, связанных с маппингом больших объектов.
Использование @Column для уточнения размера:
Для больших текстовых полей можно использовать аннотацию @Column с параметром length, чтобы указать максимальный размер:
@Lob
@Column(length = 1000000)
private String largeText;
Использование @Basic для ленивой загрузки:
Для оптимизации производительности можно использовать аннотацию @Basic с параметром fetch = FetchType.LAZY, чтобы загружать большие объекты только при необходимости:
@Lob
@Basic(fetch = FetchType.LAZY)
private byte[] largeBinaryData;
#Java #Training #Hard #Spring #SpringDataJPA #Lob
Что выведет код?
#Tasks
abstract class Animal0603 {
abstract void sound();
void sleep() {
System.out.println("Sleeping...");
}
}
class Dog0603 extends Animal0603 {
void sound() {
System.out.println("Bark");
}
}
public class Task060325 {
public static void main(String[] args) {
Animal0603 animal = new Dog0603();
animal.sound();
animal.sleep();
}
}
#Tasks
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩💻
Какой модификатор доступа позволяет видеть поле только внутри класса?
Какой модификатор доступа позволяет видеть поле только внутри класса?
Anonymous Quiz
9%
public
4%
protected
86%
private
2%
default