Hibernate:与InheritanceType.Single_Table中的子类的关系

时间:2014-02-28 14:28:35

标签: java hibernate inheritance

我有两个MyObject的子类:SubObject1和SubObject2。现在我还有一个实体:OtherClass。在OtherClass和SubObject1之间存在1:1的关系,在OtherClass和SubObject2之间存在1:n的关系。

MyObject来:

@Entity
@Table( name = "MYOBJECT" )
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn( name = "OBJ_TYP", discriminatorType = DiscriminatorType.STRING )
public abstract class MyObject{

     @Id
     @Column( name = "OBJ_ID")
     private Long id;

     ...
}

SubObject1:

@Entity
@Table( name = "MYOBJECT" )
@DiscriminatorValue( value = "SUB1" )
public class SubObject1 extends MyObject{
    @OneToOne(mappedBy="subObject1")
    private OtherClass otherClass;
    ...
}

SubObject2:

@Entity
@Table( name = "MYOBJECT" )
@DiscriminatorValue( value = "SUB2" )
public class SubObject2 extends MyObject{

    @OneToMany(mappedBy="subObject2")
    private Set<OtherClass> otherClassList;  
    ...
}

OtherClass:

@Entity
@Table( name = "OTHER")
public class OtherClass{

    @OneToOne
    @JoinColumn(name = "OTHER_OBJ_ID", referencedColumn = "OBJ_ID", nullable=true)
    private SubObject1 subObject1;

    @ManyToOne
    @JoinColumn( name = "OTHER_OBJ_ID", referencedColumn = "OBJ_ID", nullable = true)
    private SubObject2 subObject2;

}

现在,当我有一个像以下的hql查询:

FROM OtherClass c LEFT JOIN FETCH c.subObject1 LEFT JOIN FETCH c.subObject2

我得到:

java.lang.RuntimeException: org.hibernate.MappingException: Repeated column in mapping for entity: ...OtherClass column: OTHER_OBJ_ID (should be mapped with insert="false" update="false")

我知道重复列“OTHER_OBJ_ID”。但为什么我不能那样做呢?我认为,由于鉴别器值的声明,hibernate可以找出应该在哪种类型的实体。我真的不想在OTHER表中添加一列。是否有可能在不添加新列并单独使用obj1和obj2的情况下执行此操作?

请帮助我!

1 个答案:

答案 0 :(得分:0)

您别无选择,只能在映射中使用不同的列或使用MyObject的单个OneToMany集合,并让您的Java代码或HQL获取您正在寻找的子类。