猿问

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

单向关联和双向关联有什么区别?


由于在数据库中生成的表都是相同的,所以我发现的唯一区别是双向关联的每一侧都有一个引用,而单向则没有。


这是单向关联


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 关联


精慕HU
浏览 647回答 3
3回答

胡说叔叔

有两个主要区别。访问关联方第一个与您如何访问关系有关。对于单向关联,您只能从一端导航关联。因此,对于单向@ManyToOne关联,这意味着您只能从外键所在的子端访问该关系。如果您具有单向@OneToMany关联,则意味着您只能从外键所在的父侧访问该关系。对于双向@OneToMany关联,您可以通过两种方式从父方或子方导航关联。您还需要对双向关联使用添加/删除实用程序方法,以确保双方正确同步。性能第二方面与性能有关。因为@OneToMany,单向关联的效果不如双向关联。对于@OneToOne,双向关联,将导致母公司要获取热切如果Hibernate无法告诉代理是否应该分配或空值。因为@ManyToMany,集合类型的Sets表现优于集合,产生了很大的变化Lists。

暮色呼如

在编码方面,双向关系的实现更加复杂,因为根据JPA规范5(第42页),应用程序负责使双方保持同步。不幸的是,规范中给出的示例没有提供更多细节,因此也没有给出复杂程度的概念。当不使用二级缓存时,正确执行关系方法通常不是问题,因为在事务结束时实例将被丢弃。使用二级缓存时,如果由于错误实施的关系处理方法而导致任何内容损坏,这意味着其他事务也将看到损坏的元素(二级缓存是全局的)。正确实现的双向关系可以使查询和代码更简单,但如果就业务逻辑而言确实没有意义,则不应使用。
随时随地看视频慕课网APP

相关分类

Java
我要回答