Java自学之路-Java中级教程-41:Hibernate一对多@OneToMany和多对一@ManyToOne的数据关系

xiaoxiao2021-02-28  43

除了一对一的关系,还有一对多,上一节是一个人只能生一个孩子,现在实行多胎制,一个人可以有多个孩子,但这些孩子的父亲只能是这一个人。

 

在Person.java中定义一个属性subs,这些subs也可以是Person类。这里使用@OneToMany作为注解一对多关系,这个多方是一个集合Set。需要注意的是,这里要多加一个@JoinColumn(name="parent_id"),指的是按照哪个字段查询关联到这些子记录。

 

      @OneToMany     @JoinColumn(name="parent_id")     private Set subs; public Set getSubs() { return subs; } public void setSubs(Set subs) { this.subs = subs; } public Set getSubs() { return subs; } public void setSubs(Set subs) { this.subs = subs; }

 

可以这样说,如果一个人是另一个人的父亲,这另一个人就可以有别的孩子。在页面里多添加几个Person的记录13,、14、15,父亲都设置为11,那么这些记录就是第11条记录的孩子们。

 

这里用了@OneToMany,就需要@ManyToOne相配合使用。一对多的另一面就是多对一,应该在一的那一方加注解@ManyToOne,这里就是parent属性。

//    @OneToOne @ManyToOne private Person parent;  

同样在页面里把subs属性显示出来,但这里可能会遇到failed to lazily initialize a collection的错误。这个错误是因为懒加载lazy,也就是前面提到的延迟加载。解决这个问题,可以在@OneToMany的参数中使用fetch=FetchType.EAGER。这里的FetchType就是查询类型,有EAGER立即加载和LAZY延迟加载,这里使用EAGER。

 

    @OneToMany(fetch=FetchType.EAGER)     @JoinColumn(name="parent_id")     private Set subs;  

 

 

配套进阶视频教程:

https://edu.csdn.net/combo/detail/938

 

Java中级SSH框架项目开发设计教程

 

Java视频教程

 

 

转载请注明原文地址: https://www.6miu.com/read-2623993.html

最新回复(0)