java - 引用JPA中的一个表

标签 java hibernate jpa

我在 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/

相关文章:

java - 了解 Java 调试 SSL 消息

JavaFX WebView 抛出异常

java - FXMLLoader 未从 JUnitTest 加载(相对路径问题)

java - 无法提交 JPA 事务 : Transaction marked as rollbackOnly

java - 使用 Java 使用提供的 key 和 iv 解密 openssl aes-256-cbc

java - 在java中解析两种不同模式的好方法

java - 从 hibernate 检索几何对象到 angular.js

java - hibernate 基础知识

java - JPA OneToMany 和 ManyToOne 之间的关系

java - 将 EntityManager Autowiring 到服务中时出现 FactoryBeanNotInitializedException