首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >引用JPA中的表

引用JPA中的表
EN

Stack Overflow用户
提问于 2018-09-12 14:10:00
回答 1查看 230关注 0票数 0

我对JPA和hibernate有一个问题,我无法理解。我有两个有数据的独立实体,我想从table2中从table1中读取/写入数据。

表1

代码语言:javascript
复制
@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

代码语言:javascript
复制
@Entity
@Table(name = "table2")
@Data
public class Table2{

    private String name;
    private String address;
}

因此,每当我更新table1并包含名称和地址时,我都希望将其写入table2,当获取表1时,我希望与对象一起为列表中的所有名称和地址提供服务。如何使用JPA和Hibernate实现这一点?

EN

回答 1

Stack Overflow用户

发布于 2018-09-13 07:27:58

我相信你们试图做的是一对多的关系,而不是像你们注解中所看到的多对多的关系。多对多关系是当您使用第三个表连接这两个表时,这两个表都有id对。

代码语言:javascript
复制
@Entity
@Table(name = "table1")
@Data
public class Table1{

    @OneToMany(cascade = {
        CascadeType.PERSIST,
        CascadeType.MERGE
    }, orphanRemoval = true)
    private List<Table2> data = new ArrayList<>();
}

您需要在Table1中引用Table2对象

代码语言:javascript
复制
@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版之前遗漏的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52297215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档