0

我有这个错误

mappedBy 引用了一个未知的目标实体属性

我知道问题是我应该将 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: 在此处输入图像描述

4

1 回答 1

0

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

@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);
  }
}

但这仅适用于只读访问,您必须保持值与contactOneand的值同步contactTwo

于 2020-05-17T07:47:36.537 回答