我有一个棘手的问题让hibernate命令同一个实体的两个列表。使用一些代码可以更容易理解我想做什么。
nil
但是因为hibernate处理列“sort_index”的映射,所以它映射了两次(对于Child1和Child2)。所以我收到了这个错误:
引起:org.hibernate.MappingException:映射中的重复列 for entity ... column:sort_index(应该映射为 insert =“false”update =“false”)
我知道如果我将两个不同的列用于排序,我可以解决此问题。但我想知道是否有人有更好的解决方案可以给我。
谢谢,
答案 0 :(得分:0)
我添加了一个测试来复制您的问题on GitHub,并且在修改映射到此之后它可以运行:
@MappedSuperclass
public abstract class AbstractParent {
public abstract List<CommonObject> getCommonObjects();
}
@Entity(name = "Child1")
public class Child1 extends AbstractParent {
@Id
private Long id;
@OneToMany(targetEntity = CommonObject.class, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinTable(name = "child_1_common_objects", joinColumns = @JoinColumn(name="child1_id", nullable = false))
@OrderColumn(name = "sort_index")
private List<CommonObject> commonObjects = new ArrayList<>();
public List<CommonObject> getCommonObjects() {
return this.commonObjects;
}
}
@Entity(name = "Child2")
public class Child2 extends AbstractParent {
@Id
private Long id;
@OneToMany(targetEntity = CommonObject.class, cascade = CascadeType.ALL, orphanRemoval = true)
@JoinTable(name = "child_2_common_objects", joinColumns = @JoinColumn(name="child2_id", nullable = false))
@OrderColumn(name = "sort_index")
private List<CommonObject> commonObjects = new ArrayList<>();
public List<CommonObject> getCommonObjects() {
return this.commonObjects;
}
}
@Entity(name = "CommonObject")
public class CommonObject {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
}