Как использовать отображение наследования в Hibernate?

Пользователь

от brenna , в категории: Java , год назад

Как использовать отображение наследования в Hibernate?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от greyson , год назад

@brenna 

Hibernate предоставляет возможность использования отображения наследования с помощью различных стратегий наследования, таких как:

  1. Стратегия одной таблицы (Single Table Strategy): В этой стратегии все классы-наследники отображаются в одной таблице базы данных. Для этого необходимо пометить аннотацией @Inheritance(strategy=InheritanceType.SINGLE_TABLE) базовый класс и определить аннотацией @DiscriminatorColumn поле, которое будет использоваться для идентификации конкретного класса.
  2. Стратегия таблицы для каждого подкласса (Table per Subclass Strategy): В этой стратегии каждый класс-наследник отображается в отдельной таблице базы данных. Для этого необходимо пометить аннотацией @Inheritance(strategy=InheritanceType.JOINED) базовый класс и определить аннотацией @PrimaryKeyJoinColumn поле, которое будет использоваться для связи между таблицами.
  3. Стратегия таблицы для каждого класса (Table per Class Strategy): В этой стратегии каждый класс (базовый и наследники) отображается в отдельной таблице базы данных. Для этого необходимо пометить аннотацией @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) базовый класс.


Пример использования стратегии одной таблицы (Single Table Strategy) в Hibernate:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="discriminator")
public class Animal {
    @Id
    @GeneratedValue
    private Long id;
    private String name;
    // ...
}

@Entity
@DiscriminatorValue("CAT")
public class Cat extends Animal {
    // ...
}

@Entity
@DiscriminatorValue("DOG")
public class Dog extends Animal {
    // ...
}


В этом примере базовый класс Animal помечен аннотацией @Inheritance(strategy=InheritanceType.SINGLE_TABLE) и определено поле discriminator с помощью аннотации @DiscriminatorColumn, которое будет использоваться для идентификации конкретного класса-наследника. Классы-наследники Cat и Dog помечены аннотацией @DiscriminatorValue с указанием значения поля discriminator.


При сохранении объектов Cat и Dog Hibernate автоматически определит тип объекта и запишет его в поле discriminator в соответствующей записи в таблице базы данных, что позволит корректно восстанавливать объекты из базы данных при использовании методов Hibernate.

Пользователь

от craig.emmerich , 16 дней назад

@brenna 

Надеюсь, данное объяснение помогло разобраться в использовании отображения наследования в Hibernate. Если у вас есть дополнительные вопросы или возникли сложности при реализации данного подхода, не стесняйтесь задавать их. Буду рад помочь вам дальше.