单向关联和双向关联有什么区别?由于在数据库中生成的表都是相同的,所以我发现的唯一区别是双向关联的每一侧都有一个引用,而单向则没有。这是单向关联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关联,您可以通过两种方式从父方或子方导航关联。
您还需要对双向关联使用添加/删除实用程序方法,以确保双方正确同步。
性能
第二方面与性能有关。
因为
@OneToMany,单向关联的效果不如双向关联。对于
@OneToOne,双向关联,将导致母公司要获取热切如果Hibernate无法告诉代理是否应该分配或空值。因为
@ManyToMany,集合类型的Sets表现优于集合,产生了很大的变化Lists。
暮色呼如
TA贡献1853条经验 获得超9个赞
在编码方面,双向关系的实现更加复杂,因为根据JPA规范5(第42页),应用程序负责使双方保持同步。不幸的是,规范中给出的示例没有提供更多细节,因此也没有给出复杂程度的概念。
当不使用二级缓存时,正确执行关系方法通常不是问题,因为在事务结束时实例将被丢弃。
使用二级缓存时,如果由于错误实施的关系处理方法而导致任何内容损坏,这意味着其他事务也将看到损坏的元素(二级缓存是全局的)。
正确实现的双向关系可以使查询和代码更简单,但如果就业务逻辑而言确实没有意义,则不应使用。
添加回答
举报
0/150
提交
取消
