Please open Telegram to view this post
VIEW IN TELEGRAM
Изучаем Entity, настройки и почти все аннотации. Встреча от 09.03.2025
Запись встречи -
YOUTUBE
RUTUBE
Что мы рассмотрели в видео:
🔜 Узнали что такое сущности и зачем они вообще нужны.
🔜 Прошлись по основным свойствам и настройкам.
🔜 Изучили на примере основные аннотации, пощупаем их в работе.
🔜 Написали мини-приложение в котором все это протестировали.
🔜 Проверили работоспособность через Postman
Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!
Всем хорошего настроения и терпения при просмотре!🍸
Запись встречи -
YOUTUBE
RUTUBE
Что мы рассмотрели в видео:
Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!
Всем хорошего настроения и терпения при просмотре!
Please open Telegram to view this post
VIEW IN TELEGRAM
Аннотация @Embeddable
Аннотация @Embeddable используется в Java Persistence API (JPA) для обозначения класса, который может быть встроен (embedded) в другую сущность. Класс, помеченный этой аннотацией, не является самостоятельной сущностью, но его поля могут быть включены в таблицу сущности, которая его использует. Аннотация находится в пакете javax.persistence (или jakarta.persistence в Jakarta EE).
Аннотация @Embeddable не принимает параметров. Она просто указывает, что класс может быть встроен в другую сущность.
Пример использования:
Класс, помеченный @Embeddable, по умолчанию не имеет отдельной таблицы в базе данных. Его поля включаются в таблицу сущности, которая его использует.
Если встроенный класс содержит поля, которые сами являются сущностями или коллекциями, их маппинг должен быть явно настроен с использованием других аннотаций JPA (например, @OneToMany, @ManyToOne).
Жизненный цикл
Применение: Аннотация @Embeddable применяется на этапе маппинга сущности JPA. Она определяет, что класс может быть встроен в другую сущность.
Инициализация: При загрузке сущности из базы данных JPA создает экземпляр встроенного класса и заполняет его данными.
Уничтожение: При сохранении сущности в базу данных JPA сохраняет данные встроенного класса в таблицу сущности.
Кастомизация маппинга:
Если требуется переопределить маппинг полей встроенного класса, можно использовать аннотации @AttributeOverride и @AttributeOverrides в сущности, которая использует встроенный класс.
Варианты настройки
Использование встроенных классов:
Подходит для случаев, когда требуется повторно использовать группу полей в нескольких сущностях.
Упрощает код, так как не требуется дублировать поля в разных сущностях.
Переопределение маппинга:
Позволяет гибко настраивать маппинг полей встроенного класса для каждой сущности, используя @AttributeOverride и @AttributeOverrides.
Использование встроенных классов с коллекциями:
Если встроенный класс содержит коллекции, их маппинг должен быть явно настроен с использованием аннотаций JPA (например, @ElementCollection).
Пример использования
В этом примере:
Класс Address помечен как @Embeddable и может быть встроен в сущность User.
Поля homeAddress и workAddress включаются в таблицу User.
Для workAddress используется переопределение маппинга с помощью @AttributeOverrides.
#Java #Training #Hard #Spring #SpringDataJPA #Embeddable
Аннотация @Embeddable используется в Java Persistence API (JPA) для обозначения класса, который может быть встроен (embedded) в другую сущность. Класс, помеченный этой аннотацией, не является самостоятельной сущностью, но его поля могут быть включены в таблицу сущности, которая его использует. Аннотация находится в пакете javax.persistence (или jakarta.persistence в Jakarta EE).
Аннотация @Embeddable не принимает параметров. Она просто указывает, что класс может быть встроен в другую сущность.
Пример использования:
@Embeddable
public class Address {
private String street;
private String city;
private String zipCode;
}
Класс, помеченный @Embeddable, по умолчанию не имеет отдельной таблицы в базе данных. Его поля включаются в таблицу сущности, которая его использует.
Если встроенный класс содержит поля, которые сами являются сущностями или коллекциями, их маппинг должен быть явно настроен с использованием других аннотаций JPA (например, @OneToMany, @ManyToOne).
Жизненный цикл
Применение: Аннотация @Embeddable применяется на этапе маппинга сущности JPA. Она определяет, что класс может быть встроен в другую сущность.
Инициализация: При загрузке сущности из базы данных JPA создает экземпляр встроенного класса и заполняет его данными.
Уничтожение: При сохранении сущности в базу данных JPA сохраняет данные встроенного класса в таблицу сущности.
Кастомизация маппинга:
Если требуется переопределить маппинг полей встроенного класса, можно использовать аннотации @AttributeOverride и @AttributeOverrides в сущности, которая использует встроенный класс.
Варианты настройки
Использование встроенных классов:
Подходит для случаев, когда требуется повторно использовать группу полей в нескольких сущностях.
Упрощает код, так как не требуется дублировать поля в разных сущностях.
Переопределение маппинга:
Позволяет гибко настраивать маппинг полей встроенного класса для каждой сущности, используя @AttributeOverride и @AttributeOverrides.
Использование встроенных классов с коллекциями:
Если встроенный класс содержит коллекции, их маппинг должен быть явно настроен с использованием аннотаций JPA (например, @ElementCollection).
Пример использования
@Embeddable
public class Address {
private String street;
private String city;
private String zipCode;
}
@Entity
public class User {
@Id
private Long id;
@Embedded
private Address homeAddress;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "street", column = @Column(name = "work_street")),
@AttributeOverride(name = "city", column = @Column(name = "work_city"))
})
private Address workAddress;
}
В этом примере:
Класс Address помечен как @Embeddable и может быть встроен в сущность User.
Поля homeAddress и workAddress включаются в таблицу User.
Для workAddress используется переопределение маппинга с помощью @AttributeOverrides.
#Java #Training #Hard #Spring #SpringDataJPA #Embeddable
Что выведет код?
#Tasks
public class Task100325 {
public static void print(int a) {
System.out.println("int: " + a);
}
public static void print(double a) {
System.out.println("double: " + a);
}
public static void print(float a) {
System.out.println("float: " + a);
}
public static void main(String[] args) {
print(10);
print(10L);
}
}
#Tasks
Варианты ответа:
Anonymous Quiz
17%
int: 10 int: 10.0
15%
int: 10 double: 10.0
20%
int: 10 float: 10.0
49%
Ошибка компиляции
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩💻
Что произойдёт, если не указать модификатор доступа для метода?
Что произойдёт, если не указать модификатор доступа для метода?
Anonymous Quiz
5%
Метод станет private
21%
Метод станет public
61%
Метод станет default
12%
Ошибка компиляции
Аннотация @Embedded
Аннотация @Embedded используется в Java Persistence API (JPA) для указания того, что поле сущности является встроенным объектом (embedded object). Встроенный объект — это класс, помеченный аннотацией @Embeddable, который не является самостоятельной сущностью, но его поля включаются в таблицу сущности, которая его использует. Аннотация @Embedded находится в пакете javax.persistence (или jakarta.persistence в Jakarta EE).
Аннотация @Embedded не принимает параметров. Она просто указывает, что поле сущности является встроенным объектом.
Пример использования:
Если аннотация @Embedded не указана, JPA автоматически распознает встроенные объекты, если их класс помечен аннотацией @Embeddable.
Поля встроенного объекта включаются в таблицу сущности, которая его использует.
Жизненный цикл
Применение: Аннотация @Embedded применяется на этапе маппинга сущности JPA. Она определяет, что поле является встроенным объектом.
Инициализация: При загрузке сущности из базы данных JPA создает экземпляр встроенного объекта и заполняет его данными.
Уничтожение: При сохранении сущности в базу данных JPA сохраняет данные встроенного объекта в таблицу сущности.
Кастомизация маппинга:
Если требуется переопределить маппинг полей встроенного объекта, можно использовать аннотации @AttributeOverride и @AttributeOverrides в сущности, которая использует встроенный объект.
Варианты настройки
Использование встроенных объектов:
Подходит для случаев, когда требуется повторно использовать группу полей в нескольких сущностях.
Упрощает код, так как не требуется дублировать поля в разных сущностях.
Переопределение маппинга:
Позволяет гибко настраивать маппинг полей встроенного объекта для каждой сущности, используя @AttributeOverride и @AttributeOverrides.
Использование встроенных объектов с коллекциями:
Если встроенный объект содержит коллекции, их маппинг должен быть явно настроен с использованием аннотаций JPA (например, @ElementCollection).
#Java #Training #Hard #Spring #SpringDataJPA #Embedded
Аннотация @Embedded используется в Java Persistence API (JPA) для указания того, что поле сущности является встроенным объектом (embedded object). Встроенный объект — это класс, помеченный аннотацией @Embeddable, который не является самостоятельной сущностью, но его поля включаются в таблицу сущности, которая его использует. Аннотация @Embedded находится в пакете javax.persistence (или jakarta.persistence в Jakarta EE).
Аннотация @Embedded не принимает параметров. Она просто указывает, что поле сущности является встроенным объектом.
Пример использования:
@Entity
public class User {
@Id
private Long id;
@Embedded
private Address address;
}
Если аннотация @Embedded не указана, JPA автоматически распознает встроенные объекты, если их класс помечен аннотацией @Embeddable.
Поля встроенного объекта включаются в таблицу сущности, которая его использует.
Жизненный цикл
Применение: Аннотация @Embedded применяется на этапе маппинга сущности JPA. Она определяет, что поле является встроенным объектом.
Инициализация: При загрузке сущности из базы данных JPA создает экземпляр встроенного объекта и заполняет его данными.
Уничтожение: При сохранении сущности в базу данных JPA сохраняет данные встроенного объекта в таблицу сущности.
Кастомизация маппинга:
Если требуется переопределить маппинг полей встроенного объекта, можно использовать аннотации @AttributeOverride и @AttributeOverrides в сущности, которая использует встроенный объект.
Варианты настройки
Использование встроенных объектов:
Подходит для случаев, когда требуется повторно использовать группу полей в нескольких сущностях.
Упрощает код, так как не требуется дублировать поля в разных сущностях.
Переопределение маппинга:
Позволяет гибко настраивать маппинг полей встроенного объекта для каждой сущности, используя @AttributeOverride и @AttributeOverrides.
Использование встроенных объектов с коллекциями:
Если встроенный объект содержит коллекции, их маппинг должен быть явно настроен с использованием аннотаций JPA (например, @ElementCollection).
#Java #Training #Hard #Spring #SpringDataJPA #Embedded
Аннотация @Inheritance
Аннотация @Inheritance используется в Java Persistence API (JPA) для определения стратегии наследования сущностей. Она позволяет указать, как сущности, связанные отношениями наследования, будут отображаться на таблицы базы данных. Аннотация находится в пакете javax.persistence (или jakarta.persistence в Jakarta EE).
Аннотация @Inheritance принимает один параметр — strategy, который определяет стратегию наследования.
Параметр strategy может принимать одно из следующих значений:
InheritanceType.SINGLE_TABLE:
Все сущности в иерархии наследования отображаются на одну таблицу.
Для различения типов сущностей используется дискриминаторный столбец (discriminator column).
Пример:
InheritanceType.JOINED:
Каждая сущность в иерархии наследования отображается на отдельную таблицу.
Общие поля хранятся в таблице родительской сущности, а уникальные поля — в таблицах дочерних сущностей.
Пример:
InheritanceType.TABLE_PER_CLASS:
Каждая сущность в иерархии наследования отображается на отдельную таблицу, и все поля (включая унаследованные) хранятся в таблице дочерней сущности.
Пример:
Если аннотация @Inheritance не указана, JPA по умолчанию использует стратегию InheritanceType.SINGLE_TABLE.
Жизненный цикл
Применение: Аннотация @Inheritance применяется на этапе маппинга сущности JPA. Она определяет, как сущности в иерархии наследования будут отображаться на таблицы базы данных.
Инициализация: При загрузке сущности из базы данных JPA использует указанную стратегию наследования для создания объектов.
Уничтожение: При сохранении сущности в базу данных JPA использует указанную стратегию наследования для записи данных.
Кастомизация стратегии наследования:
Если требуется изменить стратегию наследования для конкретной иерархии сущностей, можно использовать аннотацию @Inheritance с нужным значением параметра strategy.
Пример использования
Стратегия SINGLE_TABLE
Стратегия JOINED
#Java #Training #Hard #Spring #SpringDataJPA #Inheritance
Аннотация @Inheritance используется в Java Persistence API (JPA) для определения стратегии наследования сущностей. Она позволяет указать, как сущности, связанные отношениями наследования, будут отображаться на таблицы базы данных. Аннотация находится в пакете javax.persistence (или jakarta.persistence в Jakarta EE).
Аннотация @Inheritance принимает один параметр — strategy, который определяет стратегию наследования.
Параметр strategy может принимать одно из следующих значений:
InheritanceType.SINGLE_TABLE:
Все сущности в иерархии наследования отображаются на одну таблицу.
Для различения типов сущностей используется дискриминаторный столбец (discriminator column).
Пример:
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
public class Vehicle { ... }
InheritanceType.JOINED:
Каждая сущность в иерархии наследования отображается на отдельную таблицу.
Общие поля хранятся в таблице родительской сущности, а уникальные поля — в таблицах дочерних сущностей.
Пример:
@Inheritance(strategy = InheritanceType.JOINED)
public class Vehicle { ... }
InheritanceType.TABLE_PER_CLASS:
Каждая сущность в иерархии наследования отображается на отдельную таблицу, и все поля (включая унаследованные) хранятся в таблице дочерней сущности.
Пример:
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Vehicle { ... }
Если аннотация @Inheritance не указана, JPA по умолчанию использует стратегию InheritanceType.SINGLE_TABLE.
Жизненный цикл
Применение: Аннотация @Inheritance применяется на этапе маппинга сущности JPA. Она определяет, как сущности в иерархии наследования будут отображаться на таблицы базы данных.
Инициализация: При загрузке сущности из базы данных JPA использует указанную стратегию наследования для создания объектов.
Уничтожение: При сохранении сущности в базу данных JPA использует указанную стратегию наследования для записи данных.
Кастомизация стратегии наследования:
Если требуется изменить стратегию наследования для конкретной иерархии сущностей, можно использовать аннотацию @Inheritance с нужным значением параметра strategy.
Пример использования
Стратегия SINGLE_TABLE
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
public class Vehicle {
@Id
private Long id;
private String manufacturer;
}
@Entity
@DiscriminatorValue("CAR")
public class Car extends Vehicle {
private int numberOfSeats;
}
@Entity
@DiscriminatorValue("TRUCK")
public class Truck extends Vehicle {
private double payloadCapacity;
}
Стратегия JOINED
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Vehicle {
@Id
private Long id;
private String manufacturer;
}
@Entity
public class Car extends Vehicle {
private int numberOfSeats;
}
@Entity
public class Truck extends Vehicle {
private double payloadCapacity;
}
Стратегия TABLE_PER_CLASS
java
Copy
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Vehicle {
@Id
private Long id;
private String manufacturer;
}
@Entity
public class Car extends Vehicle {
private int numberOfSeats;
}
@Entity
public class Truck extends Vehicle {
private double payloadCapacity;
}
#Java #Training #Hard #Spring #SpringDataJPA #Inheritance
Что выведет код?
#Tasks
public class Task110325 {
public static void main(String[] args) {
String str = "Hello, Java!";
String result = str.substring(str.indexOf("J"), str.length() - 2).toUpperCase();
System.out.println(result);
}
}
#Tasks
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩💻
Что такое null в Java?
Что такое null в Java?
Anonymous Quiz
8%
Число 0
11%
Пустая строка
79%
Отсутствие ссылки на объект
2%
Выполнение ошибки
Аннотации @DiscriminatorColumn и @DiscriminatorValue
Аннотации @DiscriminatorColumn и @DiscriminatorValue используются в Java Persistence API (JPA) для работы с наследованием сущностей, когда применяется стратегия InheritanceType.SINGLE_TABLE. Они помогают различать типы сущностей в одной таблице базы данных.
@DiscriminatorColumn: Определяет столбец в таблице базы данных, который хранит информацию о типе сущности.
@DiscriminatorValue: Указывает значение, которое будет храниться в дискриминаторном столбце для конкретной сущности.
Обе аннотации находятся в пакете javax.persistence (или jakarta.persistence в Jakarta EE).
Аннотация @DiscriminatorColumn
Аннотация @DiscriminatorColumn принимает следующие параметры:
name: Имя дискриминаторного столбца в таблице базы данных.
По умолчанию: "DTYPE".
discriminatorType: Тип данных дискриминаторного столбца.
Может принимать одно из следующих значений:
DiscriminatorType.STRING: Столбец хранит строковые значения (по умолчанию).
DiscriminatorType.CHAR: Столбец хранит символьные значения.
DiscriminatorType.INTEGER: Столбец хранит целочисленные значения.
По умолчанию: DiscriminatorType.STRING.
columnDefinition: Определение столбца в SQL (например, тип данных и ограничения).
По умолчанию: генерируется автоматически.
length: Длина столбца (актуально для строковых типов).
По умолчанию: 31.
Пример использования:
Аннотация @DiscriminatorValue
Аннотация @DiscriminatorValue принимает один параметр — value, который определяет значение, хранимое в дискриминаторном столбце для конкретной сущности.
Пример использования:
Если @DiscriminatorColumn не указана, JPA по умолчанию создает столбец с именем "DTYPE" и типом DiscriminatorType.STRING.
Если @DiscriminatorValue не указана, JPA использует имя класса сущности в качестве значения.
Жизненный цикл
Применение: Аннотации применяются на этапе маппинга сущности JPA. Они определяют, как сущности будут различаться в одной таблице.
Инициализация: При загрузке сущности из базы данных JPA использует значение дискриминаторного столбца для определения типа сущности.
Уничтожение: При сохранении сущности в базу данных JPA записывает значение дискриминаторного столбца.
Кастомизация дискриминаторного столбца:
Если требуется изменить параметры дискриминаторного столбца (например, имя или тип), можно использовать аннотацию @DiscriminatorColumn с нужными значениями.
Пример использования
В этом примере:
Сущности Car и Truck наследуются от Vehicle.
В таблице Vehicle создается столбец vehicle_type, который хранит значения "CAR" для автомобилей и "TRUCK" для грузовиков.
#Java #Training #Hard #Spring #SpringDataJPA #DiscriminatorColumn #DiscriminatorValue
Аннотации @DiscriminatorColumn и @DiscriminatorValue используются в Java Persistence API (JPA) для работы с наследованием сущностей, когда применяется стратегия InheritanceType.SINGLE_TABLE. Они помогают различать типы сущностей в одной таблице базы данных.
@DiscriminatorColumn: Определяет столбец в таблице базы данных, который хранит информацию о типе сущности.
@DiscriminatorValue: Указывает значение, которое будет храниться в дискриминаторном столбце для конкретной сущности.
Обе аннотации находятся в пакете javax.persistence (или jakarta.persistence в Jakarta EE).
Аннотация @DiscriminatorColumn
Аннотация @DiscriminatorColumn принимает следующие параметры:
name: Имя дискриминаторного столбца в таблице базы данных.
По умолчанию: "DTYPE".
discriminatorType: Тип данных дискриминаторного столбца.
Может принимать одно из следующих значений:
DiscriminatorType.STRING: Столбец хранит строковые значения (по умолчанию).
DiscriminatorType.CHAR: Столбец хранит символьные значения.
DiscriminatorType.INTEGER: Столбец хранит целочисленные значения.
По умолчанию: DiscriminatorType.STRING.
columnDefinition: Определение столбца в SQL (например, тип данных и ограничения).
По умолчанию: генерируется автоматически.
length: Длина столбца (актуально для строковых типов).
По умолчанию: 31.
Пример использования:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "vehicle_type", discriminatorType = DiscriminatorType.STRING, length = 20)
public class Vehicle {
@Id
private Long id;
private String manufacturer;
}
Аннотация @DiscriminatorValue
Аннотация @DiscriminatorValue принимает один параметр — value, который определяет значение, хранимое в дискриминаторном столбце для конкретной сущности.
Пример использования:
@Entity
@DiscriminatorValue("CAR")
public class Car extends Vehicle {
private int numberOfSeats;
}
@Entity
@DiscriminatorValue("TRUCK")
public class Truck extends Vehicle {
private double payloadCapacity;
}
Если @DiscriminatorColumn не указана, JPA по умолчанию создает столбец с именем "DTYPE" и типом DiscriminatorType.STRING.
Если @DiscriminatorValue не указана, JPA использует имя класса сущности в качестве значения.
Жизненный цикл
Применение: Аннотации применяются на этапе маппинга сущности JPA. Они определяют, как сущности будут различаться в одной таблице.
Инициализация: При загрузке сущности из базы данных JPA использует значение дискриминаторного столбца для определения типа сущности.
Уничтожение: При сохранении сущности в базу данных JPA записывает значение дискриминаторного столбца.
Кастомизация дискриминаторного столбца:
Если требуется изменить параметры дискриминаторного столбца (например, имя или тип), можно использовать аннотацию @DiscriminatorColumn с нужными значениями.
Пример использования
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "vehicle_type", discriminatorType = DiscriminatorType.STRING, length = 20)
public class Vehicle {
@Id
private Long id;
private String manufacturer;
}
@Entity
@DiscriminatorValue("CAR")
public class Car extends Vehicle {
private int numberOfSeats;
}
@Entity
@DiscriminatorValue("TRUCK")
public class Truck extends Vehicle {
private double payloadCapacity;
}
В этом примере:
Сущности Car и Truck наследуются от Vehicle.
В таблице Vehicle создается столбец vehicle_type, который хранит значения "CAR" для автомобилей и "TRUCK" для грузовиков.
#Java #Training #Hard #Spring #SpringDataJPA #DiscriminatorColumn #DiscriminatorValue