为了账号安全,请及时绑定邮箱和手机立即绑定

单向和双向JPA和Hibernate关联之间有什么区别?

单向和双向JPA和Hibernate关联之间有什么区别?

精慕HU 2019-12-07 15:04:15
单向关联和双向关联有什么区别?由于在数据库中生成的表都是相同的,所以我发现的唯一区别是双向关联的每一侧都有一个引用,而单向则没有。这是单向关联public class User {    private int     id;    private String  name;    @ManyToOne    @JoinColumn(            name = "groupId")    private Group   group;}public class Group {    private int     id;    private String  name;}双向关联public class User {    private int     id;    private String  name;    @ManyToOne    @JoinColumn(            name = "groupId")    private Group   group;}public class Group {    private int         id;    private String      name;    @OneToMany(mappedBy="group")    private List<User>  users;}区别在于该组是否持有用户的参考。所以我想知道这是否是唯一的区别?哪个推荐?java hibernate jpa orm 关联
查看完整描述

3 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

有两个主要区别。

访问关联方

第一个与您如何访问关系有关。对于单向关联,您只能从一端导航关联。

因此,对于单向@ManyToOne关联,这意味着您只能从外键所在的子端访问该关系。

如果您具有单向@OneToMany关联,则意味着您只能从外键所在的父侧访问该关系。

对于双向@OneToMany关联,您可以通过两种方式从父方或子方导航关联。

您还需要对双向关联使用添加/删除实用程序方法,以确保双方正确同步。

性能

第二方面与性能有关。

  1. 因为@OneToMany,单向关联的效果不如双向关联。

  2. 对于@OneToOne,双向关联,将导致母公司要获取热切如果Hibernate无法告诉代理是否应该分配或空值。

  3. 因为@ManyToMany,集合类型的Sets表现优于集合,产生了很大的变化Lists


查看完整回答
反对 回复 2019-12-07
?
暮色呼如

TA贡献1853条经验 获得超9个赞

在编码方面,双向关系的实现更加复杂,因为根据JPA规范5(第42页),应用程序负责使双方保持同步。不幸的是,规范中给出的示例没有提供更多细节,因此也没有给出复杂程度的概念。

当不使用二级缓存时,正确执行关系方法通常不是问题,因为在事务结束时实例将被丢弃。

使用二级缓存时,如果由于错误实施的关系处理方法而导致任何内容损坏,这意味着其他事务也将看到损坏的元素(二级缓存是全局的)。

正确实现的双向关系可以使查询和代码更简单,但如果就业务逻辑而言确实没有意义,则不应使用。


查看完整回答
反对 回复 2019-12-07
  • 3 回答
  • 0 关注
  • 646 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号