Итак, я хочу реализовать существующую структуру DB моей прежней системы, но есть некоторые проблемы.
У меня есть три таблицы: A
, B
и C
. A
содержит строку nr
, которая указывает на запись либо B
, либо C
. Проблема в том, что первичный ключ B
- это nr_b
, а первичный ключ C
- nr_c
.
. У меня есть приложение с пружинной загрузкой, за которым стоит DB postgres.
Вот что я попробовал:
@Entity
class A {
...
@Column(name="nr")
private SuperBC item;
...
}
@MappedSuperClass
abstract class SuperBC {
abstract Long getId();
abstract void setId(Long id);
}
@Entity
class B extends SuperBC {
@Id
@Column(name = "nr_b")
private Long id;
...
}
@Entity
class C extends SuperBC {
@Id
@Column(name = "nr_c")
private Long id;
...
}
Это не работает, потому что вы не можете иметь поле, помеченное @MappedSuperClass
. Я также попытался поставить @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
вместо @MappedSuperclass
, но затем я должен также пометить SuperBC
с помощью @Entity
, и мне нужно создать поле с пометкой @Id
, которого нет в моей БД.
Можно ли вручную написать отображение для класса A
в entityManager?
Спасибо, ребята!