У меня довольно простой вопрос.Допустим, у меня есть иерархия классов A <- B (<code>class B extends class A
).Оба являются бобами и сохраняются hibernate в базе данных.Чтобы отобразить иерархию, я знаю два метода:
- все в одной таблице: A и B будут сохранены в одной таблице, а поле
type
будет определять, относится ли запись к типуA или B. - по одной таблице для каждого типа: при сохранении объекта B Hibernate поместит его в таблицу B, а также создаст запись в таблице A.Идентификаторы будут одинаковыми, чтобы убедиться, что это один объект.
Теперь я хотел бы объединить эти два: всякий раз, когда я сохраняю объект из типа B, он также должен быть записан в таблицу B.как в таблице А.Но также должно быть поле «тип» в таблице «А», где показан тип каждой записи.
Я пробовал это со следующими аннотациями в class A
:
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
Первый определяет, что каждый объект будет сохранен в отдельных таблицах, а второй должен записать тип в поле типа.
Class B
имеет эту аннотацию:
@DiscriminatorValue("B")
Но это, к сожалению, не работает.Когда я хочу вставить объект A в таблицу A, он сохраняет эту запись два раза, а затем выдает ошибку, что ключ уже используется.Поэтому я думаю, что это не правильный способ сделать это.
Кто-нибудь может мне помочь с этим?Учебники, которые я нашел, довольно смущают меня, так как я очень новичок в этой теме.Кроме того, большинство объяснений используют XML-файлы вместо аннотаций.