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

问题描述:

我有一个实体层次结构有单个表的所有子类的策略。我想要使​​用每个属性映射的@ManyToOne作为主键。当我把@Id注释,我得到这个错误:我可以在Discriminated Entity Hierarchy的子类上使用CompositeId吗?

java.lang.ClassCastException:org.hibernate.mapping.SingleTableSubclass不能转换到org.hibernate.mapping.RootClass

那么怎么可以提供将所有属性定义为区分层次结构上的标识符?

对于实体层次结构中的最高级对象,您的ID必须是唯一的。您不能在子类上定义标识并拥有一个超类,即一个没有标识的实体。

想想这样,entityManager.find(SuperClass.class, 2);是一个完全合法的电话。如果ID在子类中定义为FK列,那么它们中的多个ID可能为ID 2!什么会返回?

将ManyToOne关系的FK端用作主键在第一位是无意义的。那么它将被定义为OneToOne。