我有这个错误


通过引用未知目标实体属性


我知道问题是我应该使mappeby值“ person”而不是person1和person2,但是问题是我在Contact类中有2个类型为person(person1,person2)的变量,我不能用相同的名称命名名称 !

在课堂上

@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY, mappedBy = "person")
private Set<Contact> contact = new HashSet<>();


在课堂上联系

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_person", nullable = false)
private Person person1;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_person", nullable = false)
private Person person2;


我的MCD:
enter image description here

最佳答案

mappedBy用于表示现有关系的引用方,因此在JPA中您不能真正将它同时映射到两个关系。您必须分别为mappedByperson1定义person2属性。要在一个属性中同时获得两个值,您可以做的是定义一个瞬态属性,然后将它们手动连接到实体中。就像是:

@Entity
public class Person {
  // Other attributes

  @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY, mappedBy =
     "person1")
  private Set<Contact> contactOne = new HashSet<>();

  @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY, mappedBy =
    "person2")
  private Set<Contact> contactTwo = new HashSet<>();

  @Transient
  private Set<Contact> allContacts;

  public Person() {
    this.allContacts = new HashSet<>(contactOne);
    allContacts.addAll(contactTwo);
  }
}


但这仅用于只读访问,您必须使该值与contactOnecontactTwo的值保持同步。

10-04 17:49