我在 JPA 和 hibernate 方面遇到了一个我无法解决的问题。 我有两个带有数据的独立实体,我想从表 1 读取/写入数据到表 2。
表1
@Entity
@Table(name = "table1")
@Data
public class Table1{
@ManyToMany(cascade = {
CascadeType.PERSIST,
CascadeType.MERGE
})
@JoinTable(
name = "table2",
joinColumns = @JoinColumn(name = "tableId", referencedColumnName = "id"))
private List<Table2> data = new ArrayList<>();
}
表2
@Entity
@Table(name = "table2")
@Data
public class Table2{
private String name;
private String address;
}
因此,每当我更新 table1 并且它包含名称和地址时,我都想将其写入 table2,并且当获取表 1 时,我希望将列表中的所有名称和地址与对象一起提供。如何使用 JPA 和 Hibernate 实现这一目标?
最佳答案
我相信您想要做的是一对多关系,而不是多对多关系,如注释中所示。多对多关系是指当您使用第三个表连接两个表时,该表只有两个表的 id 对。
@Entity
@Table(name = "table1")
@Data
public class Table1{
@OneToMany(cascade = {
CascadeType.PERSIST,
CascadeType.MERGE
}, orphanRemoval = true)
private List<Table2> data = new ArrayList<>();
}
需要在Table2中引用Table1对象
@Entity
@Table(name = "table2")
@Data
public class Table2{
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "table1_id")
private Table1 owner;
private String name;
private String address;
}
我添加了orphanRemoval = true
,因为如果没有它,人们常常会感到困惑,他们已经从列表中删除了某些内容,但下次获取数据时它仍然存在。这是 JPA 规范在 2.1 版之前遗漏的内容。
关于java - 引用JPA中的一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52297215/