我可以在Discriminated Entity Hierarchy的子类上使用CompositeId吗?

我有一个实体层次结构,所有子类策略都有单个表。 我想使用每个属性 – 映射@ManyToOne – 作为主键。 当我输入@Id注释时,我收到此错误:

java.lang.ClassCastException:org.hibernate.mapping.SingleTableSubclass无法强制转换为org.hibernate.mapping.RootClass

那么我如何提供将所有属性定义为区分层次结构的标识符?

您的ID对于作为实体的层次结构中的最高对象必须是唯一的。 您不能在子类上定义ID,并且具有一个没有ID的超类(即实体)。

想一想, entityManager.find(SuperClass.class, 2); 是一个完全合法的电话。 如果ID在子类上定义为FK列,则其中多个ID可以具有ID 2! 什么会被退回?

使用ManyToOne关系的FK端作为主键首先是荒谬的。 根据定义,它将是OneToOne。