mappedBy 到许多值
mappedBy to many values
我有这个错误
mappedBy reference an unknown target entity property
我知道问题是我应该使 mappeby 值 "person" 代替 person1 和 person2 但问题是我在 [=25 中有 2 个类型为 person (person1,person2) 的变量=] 联系我不能给他们起同样的名字!
在class个人
@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY, mappedBy = "person")
private Set<Contact> contact = new HashSet<>();
在class 联系人
@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 中不能真正将其同时映射到两个关系。您必须分别为 person1
和 person2
定义 mappedBy
属性。要在一个属性中获取这两个值,您可以做的是定义一个瞬态属性并手动将它们加入实体中。类似于:
@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);
}
}
但这仅适用于只读访问,您必须使值与 contactOne
和 contactTwo
的值保持同步。
我有这个错误
mappedBy reference an unknown target entity property
我知道问题是我应该使 mappeby 值 "person" 代替 person1 和 person2 但问题是我在 [=25 中有 2 个类型为 person (person1,person2) 的变量=] 联系我不能给他们起同样的名字!
在class个人
@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY, mappedBy = "person")
private Set<Contact> contact = new HashSet<>();
在class 联系人
@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 中不能真正将其同时映射到两个关系。您必须分别为 person1
和 person2
定义 mappedBy
属性。要在一个属性中获取这两个值,您可以做的是定义一个瞬态属性并手动将它们加入实体中。类似于:
@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);
}
}
但这仅适用于只读访问,您必须使值与 contactOne
和 contactTwo
的值保持同步。