Исключение, вызванное двунаправленной связью «один ко многим»

#java #jpa

Вопрос:

У меня есть отношения между двумя сущностями, я считаю, что у меня все хорошо, но когда я пытаюсь запустить свое приложение, Payara запускает эту ошибку:

Вызвано: Исключение [EclipseLink-7154] (Службы сохранения Eclipse — 2.7.4.payara-p2): организация.eclipse.сохранение.исключения.Описание исключения исключения ValidationException: Атрибут [retenciones] в классе сущностей [класс комп.модель.ChequePropio] имеет сопоставленное значение [chequepropio], которое не существует в классе сущностей-владельцев [класс комп.модель.RetencionChp]. Если класс сущности-владельца является классом @MappedSuperclass, это недопустимо, и ваш атрибут должен ссылаться на правильный подкласс.

Здесь одна из сущностей, вызывающих проблему:

 @Entity @Table(name = "chequepropio", uniqueConstraints = { @UniqueConstraint(name = "ukchequepropio", columnNames = {"idbanco", "idempresa", "idtipo", "numero"})}) public class ChequePropio implements Serializable {   @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  private int id;   @OneToMany(fetch = FetchType.LAZY,mappedBy = "chequepropio")  private Listlt;RetencionChpgt; retenciones;   public int getId() {  return id;  }   public void setId(int id) {  this.id = id;  } }  

Другие организации:

 @Entity @Table(name = "retencionchp") public class RetencionChp implements Serializable {   @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  private int id;   @ManyToOne(fetch = FetchType.LAZY)  @JoinColumn(name = "idcheque", insertable = true, updatable = true)  private ChequePropio chequePropio;   public int getId() {  return id;  }   public void setId(int id) {  this.id = id;  }   public ChequePropio getChequePropio() {  return chequePropio;  }   public void setChequePropio(ChequePropio chequePropio) {  this.chequePropio = chequePropio;  } }  

Я не вижу никакой ошибки в отношениях, кто-нибудь мог бы сказать мне, что не так?
Заранее спасибо! Фернандо

Ответ №1:

Ошибка объясняется сама собой:

Атрибут [retenciones] в классе сущностей [класс комп.модель.ChequePropio] имеет сопоставленное значение [chequepropio], которое не существует в классе сущностей-владельцев

Обратите внимание на ключевое chequepropio слово . У вас нет chequepropio собственности в RetencionChp . У тебя есть chequePropio вместо этого. Обратите внимание на заглавные P буквы . Следующее должно решить эту проблему ( mappedBy = "chequePropio") ).

 @Entity @Table(name = "chequepropio", uniqueConstraints = { @UniqueConstraint(name = "ukchequepropio", columnNames = {"idbanco", "idempresa", "idtipo", "numero"})}) public class ChequePropio implements Serializable {   @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  private int id;   @OneToMany(fetch = FetchType.LAZY,mappedBy = "chequePropio")  private Listlt;RetencionChpgt; retenciones;   public int getId() {  return id;  }   public void setId(int id) {  this.id = id;  } }