2015-12-10 2 views
1

У меня есть сложная проблема, позволяющая hibernate упорядочить два списка одного и того же объекта. С помощью некоторого кода было бы легче понять, что я хочу делать.Hibernate бросает «Повторяющийся столбец при сопоставлении для объекта» при использовании OrderColumn с двумя списками

@MappedSuperclass 
public abstract class AbstractParent { 
    List<CommonObject> commonObjects; 

    public abstract List<CommonObject> getCommonObjects(); 
} 

@Entity 
@Table 
public class Child1 extends AbstractParent { 

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) 
    @JoinColumn(name="child1_id", nullable = false) 
    @OrderColumn(name = "sort_index") 
    public List<CommonObject> getCommonObject() { 
     return this.commonObjects; 
    } 
} 

@Entity 
@Table 
public class Child2 extends AbstractParent { 

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) 
    @JoinColumn(name="child2_id", nullable = false) 
    @OrderColumn(name = "sort_index") 
    public List<CommonObject> getCommonObject() { 
     return this.commonObjects; 
    } 
} 

Но поскольку зимуют обрабатывать отображение столбца «sort_index», она отображается дважды (для ребенка1 и ребенка2). Таким образом, я получаю эту ошибку:

вызвано следующими причинами: org.hibernate.MappingException: Повторные столбца в отображении для лица ... Колонка: sort_index (должен быть сопоставлен с вставкой = «ложь» обновление = «ложь»)

Я знаю, что могу решить эту проблему, если поместить два разных столбца для сортировки. Но я хотел бы знать, есть ли у кого-то лучшее решение, чтобы дать мне.

Спасибо,

ответ

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; 
} 
+0

Спасибо за ваш ответ. Поэтому, если я хорошо понимаю, мне нужны две другие таблицы, которые присоединяют мои объекты Child1 и Child2 к CommonObject? – Romain

+0

Я не пробовал с той же таблицей, но вы можете попробовать и посмотреть, работает ли она. –

+0

Хорошо спасибо Влад – Romain

Смежные вопросы

 Смежные вопросы