Я пытаюсь создать представление уровня приложения с помощью 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, поддерживаемых той же таблицей, которые относятся к другому объекту? Я не уверен, что у меня что-то отсутствует или это ограничение рамки.
Аннотации говорят JPA, чтобы создать две колонки с тем же именем 'FOO_I' в таблице' b'. Вот почему вы получаете сообщение об ошибке «Повторяющийся столбец при сопоставлении для объекта», одно из полей должно быть помечено как только для чтения, с '@JoinColumn (.... insertable =" false ", updatable =" false ")'. – rubenlop
@ rubenlop88 Я переименовал одно из свойств и получил другое исключение. Что делать, если мне нужна эта связь для записи в обоих классах? Может ли наследование работать вместо этого? –