当使用带有两个列表的OrderColumn时,Hibernate会抛出“实体映射中的重复列”

时间:2015-12-10 13:28:01

标签: java hibernate jpa inheritance

我有一个棘手的问题让hibernate命令同一个实体的两个列表。使用一些代码可以更容易理解我想做什么。

nil

但是因为hibernate处理列“sort_index”的映射,所以它映射了两次(对于Child1和Child2)。所以我收到了这个错误:

  

引起:org.hibernate.MappingException:映射中的重复列   for entity ... column:sort_index(应该映射为   insert =“false”update =“false”)

我知道如果我将两个不同的列用于排序,我可以解决此问题。但我想知道是否有人有更好的解决方案可以给我。

谢谢,

1 个答案:

答案 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;
}