我有两个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的情况下执行此操作?
请帮助我!
答案 0 :(得分:0)
您别无选择,只能在映射中使用不同的列或使用MyObject的单个OneToMany集合,并让您的Java代码或HQL获取您正在寻找的子类。