我有一个实体层次结构,所有子类策略都有单个表。我想使用每个属性 - 映射@ManyToOne - 作为主键。当我输入@Id注释时,我收到了这个错误:
java.lang.ClassCastException:org.hibernate.mapping.SingleTableSubclass无法强制转换为org.hibernate.mapping.RootClass
那么我如何提供将所有属性定义为区分层次结构的标识符?
答案 0 :(得分:7)
您的ID对于作为实体的层次结构中的最高对象必须是唯一的。您不能在子类上定义ID,并且拥有一个没有ID的超类(即实体)。
以这种方式思考,entityManager.find(SuperClass.class, 2);
是完全合法的电话。如果ID在子类上定义为FK列,则其中多个ID可以具有ID 2!什么会被退回?
首先使用ManyToOne关系的FK作为主键是荒谬的。根据定义,它将是OneToOne。