我可以在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。