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

时间:2010-09-01 07:15:41

标签: java hibernate

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

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

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

1 个答案:

答案 0 :(得分:7)

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

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

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