Я имею дело с парой сущностей с древовидными структурами, которые стали более сложными, поэтому я решил создать для него абстрактный класс, чтобы код был немного более понятным:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class TreeStructure<T extends TreeStructure>
{
@ManyToOne
protected T parent;
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY)
protected Set<T> children = new HashSet<>();
//...
Затем яу меня есть две сущности, которые расширяют его:
@Entity(name = "TreeStructureOne")
public class TreeStructureOne extends TreeStructure<TreeStructureOne>
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JsonProperty("TreeStructureOne_id")
private long id;
И я в основном хочу, чтобы база данных полностью не знала об этой TreeStructure
абстракции и сохранила все поля в каждой таблице сущностей и ожидала InheritanceType.TABLE_PER_CLASS
, чтобы справиться с этим,Но, похоже, мне нужно определить Id
в сущности TreeStructure
, по крайней мере, или я получу:
Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: TreeStructure
И я не хочу добавлять ID
в абстрактный класс, поскольку он создает в базе данных три таблицы: HT_TREE_STRUCTURE
, HT_TREE_STRUCTURE_ONE
и HT_TREE_STRUCTURE_TWO
с одним полем ID
каждое.
Есть ли какое-либо решение для этого?