我有这个错误
mappedBy reference an unknown target entity property
我知道问题是什么,我应该将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 中同时将其映射到两个关系。您必须为 person1
和 person2
分别定义 mappedBy
属性。要获取一个属性中的两个值,您可以定义一个 transient 属性并手动将它们加入实体中。像这样的东西:
@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
的值保持同步。
关于java - 映射到许多值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61847901/