首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA注释和mappedBy

JPA注释和mappedBy
EN

Stack Overflow用户
提问于 2015-07-12 23:00:47
回答 2查看 1.7K关注 0票数 3

我正在开发java应用程序,并使用JPA与数据库进行交互,我有两个重要问题:

  1. 我想在两个类之间建立双向链接,因为我需要访问双方的数据。让我们以两个A类和B类为例,A*-1B(作为UML图,A有唯一的B,B有几个A.)。

在A中:

代码语言:javascript
复制
@ManyToOne
private B attribute; 

在B中

代码语言:javascript
复制
@OneToMany
private List<A> list;

这就足够让双向联系了吗?还是必须使用mappedBy?

  1. 这就引出了我的第二个问题,如果mappedBy被放在了错误的一边,它只会影响性能,甚至更糟?(数据未持久化)例如,在基数1-*的情况下,我们别无选择,mappedBy应该位于OneToMany的一边,在这种情况下:

在B中

代码语言:javascript
复制
@OneToMany(mappedBy = "attribute")
private List<A> list;

我知道我不会创建B类,也不会创建一个列表和赋值对象,所以我不会在B旁边做任何事情。我只会反复创建类A,每次我给它分配一个B对象时,我可能会有几个类A具有相同的受影响对象B,我希望B自动更新这个链接及其A的列表。

EN

回答 2

Stack Overflow用户

发布于 2015-07-12 23:37:06

  • 应该将mappedBy添加到其表中没有外键的实体中(本例中最有可能是B )。
  • 如果mappedBy站在错误的一边,您应该会看到一个异常。
票数 1
EN

Stack Overflow用户

发布于 2015-07-13 16:09:25

这就足够让双向联系了吗?还是必须使用mappedBy?

不完全是。您确实需要MappedBy属性,用于反向的双向多对一关系--即没有外键的一方,并且始终是多对一关系中的一方。您还需要关于关系的许多方面的联合列信息。

因此,总结如下:

@JoinColumn信息就在这一边。这需要在单向关系和双向关系中指定。

这个边的一对多边-逆边- mappedBy属性。如果关系是双向的,则需要指定这一点。

代码语言:javascript
复制
@Entity
public class A ……..
//Owning side of the relationship with the @JoinColumn annotation.
    @ManyToOne
    // Assume TABLEPK column holds PK of B's table
    @JoinColumn (name = "TABLEBPK")
    private B attribute;


@Entity
public class B ……

//Inverse side of the relationship with the MappedBy attribute.
    @OneToMany(MappedBy = “attribute”)
    private List<A> list;

这就引出了我的第二个问题,如果mappedBy被放在了错误的一边,它只会影响性能,甚至更糟?

恐怕行不通。把它放在关系的反面。

我知道我不会创建B类,也不会创建一个列表和赋值对象,所以我不会在B旁边做任何事情。我只会反复创建类A,每次我给它分配一个B对象时,我可能会有几个类A具有相同的受影响对象B,我希望B自动更新这个链接及其A的列表。

在这个场景中,您创建了一个类A,其中的属性字段中填充了B的实例。现在,当您持久化A-一个新实例时,它将在属性字段中包含B的一个实例,该实例可能是新的,也可能不是新的。我们希望JPA能够持久化A,然后根据关系导航,并且也要持久化B。如果B已经存在于perssitence上下文中,则忽略它。添加CascadeType.PERSIST将实现这一目标。

代码语言:javascript
复制
@Entity
public class A ……..
//Owning side of the relationship with the @JoinColumn annotation.
    @ManyToOne(cascade = CascadeType.PERSIST)
    @JoinColumn (name = "TABLEBPK")
    private B attribute;

这些家伙写得很好."Pro JPA 2精通Java™持久性API“,由Mike和Merrick编写,

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

https://stackoverflow.com/questions/31373412

复制
相关文章

相似问题

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