Аннотации @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
👍3