java - 映射到许多值

标签 java hibernate spring-boot mappedby

我有这个错误

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 中同时将其映射到两个关系。您必须为 person1person2 分别定义 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);
  }
}

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

关于java - 映射到许多值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61847901/

相关文章:

java - 意外的 AST 节点 : . 靠近第 1 行,第 63 列 [更新 com.sathya.entity.Employee e set e.empSal=10000 where e.deptNumber]

java - Hibernate 为 OrderColumn 值插入 null

java - 如何使用hibernate在spring boot的fillAll方法中添加where条件

java - 创建嵌套选项卡时遇到问题

java - 加载后刷新Fragment

java - 错误找不到符号-变量

java - 在 swing 问题中编写 GUI

hibernate - Hibernate JPA缓存

java - Spring Boot多个同名同属性名的配置文件

java - Spring Boot 处理 SizeLimitExceededException