2014-12-27 3 views
0

Я пытаюсь создать представление уровня приложения с помощью Spring JPA. Я тоже использую ломбок.Получение org.hibernate.MappingException: сопоставление свойств Duplicate

Существует уже существующий клиент, который уже использует этот веб-сервис, который в настоящее время не может быть изменен. У нас есть новый клиент, которому нужны те же данные и даже больше. Поэтому я думал, что это можно было бы адресовать с представлением уровня приложения, так сказать.

Основной объем проблемы, у меня есть 3 сущности: A, B и C.

А и С являются лица указали на той же таблице. C имеет больше свойств, чем А.
Оба С и А есть ссылки на B.

@Entity 
@Getter 
@Setter 
@Table(name="Foo", schema="dbz") 
public class A { 
    @Id 
    @Column(name="FOO_I") 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    @OneToMany(fetch =FetchType.EAGER, cascade= CascadeType.ALL) 
    @JoinColumn(name="FOO_I",nullable=false) 
    private Set<B> items = new HashSet<B>(); 

    @Column(name="X") 
    private String x; 
} 

@Entity 
@Getter 
@Setter 
@Table(name="Bar", schema="dbz") 
public class B { 
    @Id 
    @Column(name="BAR_I") 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    @Column(name="Y") 
    private String y; 

    @Column(name="Z") 
    private int z; 
} 


@Entity 
@Getter 
@Setter 
@Table(name="Foo", schema="dbz") 
public class C { 
    @Id 
    @Column(name="FOO_I") 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    @OneToMany(fetch =FetchType.EAGER, cascade= CascadeType.ALL) 
    @JoinColumn(name="FOO_I",nullable=false) 
    private Set<B> items = new HashSet<B>(); 

    @Column(name="X") 
    private String x; 

    @Column(name="MoreData") 
    private String moreData; 

    //And much more other data... 
} 

Когда я закомментируйте @Entity и @Table на класс С и перестраивать, я не получаю исключение в моей проверки достоверности.

Когда я оставляю @Entity и @Table аннотаций на классе C, я получаю следующее исключение:

вызвано следующими причинами: org.hibernate.MappingException: Дублирование свойство отображение _items_FOO_IBackref найдено в com.acme.Bar

Если переименовать элементы в барах в C, то я получаю следующее исключение:

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

Есть ли способ получить спящий режим для принятия 2 классов Java, поддерживаемых той же таблицей, которые относятся к другому объекту? Я не уверен, что у меня что-то отсутствует или это ограничение рамки.

+0

Аннотации говорят JPA, чтобы создать две колонки с тем же именем 'FOO_I' в таблице' b'. Вот почему вы получаете сообщение об ошибке «Повторяющийся столбец при сопоставлении для объекта», одно из полей должно быть помечено как только для чтения, с '@JoinColumn (.... insertable =" false ", updatable =" false ")'. – rubenlop

+0

@ rubenlop88 Я переименовал одно из свойств и получил другое исключение. Что делать, если мне нужна эта связь для записи в обоих классах? Может ли наследование работать вместо этого? –

ответ