Hibernate 实体的关联关系

Hibernate 实体的关联关系和一些注意问题

  多对一(n:1):

     Hibernate 实体之间的多对一是最常见的,比如用户和订单,一个用户可以有多个订单,但是一个订单却只能有一个用户。在维护关联关系的时候,一般是多的这方去维护,为什么要这样呢?举个简单的列子:我敢打赌生活中一定看过月亮,我们都知道月亮,但是显然月亮都不知道我们具体的每一个人。在这个列子中月亮是一的一方,我们这些许许多多的地球人,是多的一方,在维护双方的关系时,是我们多的一方在维护,这样做有什么好处,比如说现在新生了一个小宝宝,我们只需告诉它,天空中有个月亮,告诉它相关信息,他就知道了,就建立起月亮和他的关系了。假如现在让月亮来维护双方的关系,月球不得不搞一张表,记录下地球上所有的人,要知道地球上每天的新生儿大概在千万级别,那么月亮要维护双方的关系,它不得不每天记录上千万的地球人信息,显然这是不可取的,其实这并没有什么特别之处,都是些生活经验。

  继续上面的列子,既然是多的一方在维护关系,那么月亮实体和地球人实体,在注解上也有所区别,首先维护关系是交给了地球人,那么在月亮实体下 List<Person>  persons; 上加注解@mappedBy("moon")  在 地球人实体下 Moon moon;上加注解@JoinColunm("moon_id")  这其中还有些延迟加载的事情, 比如说月亮出来的时候,是不会管地球人的,有的人死亡和有的人还没出生跟月球的关系不大,所有可以使用延迟加载。

   除了理解关联关系和实体的具体操作,在代码中也要注意一些问题,比如说现在,来了一群外星人,我想让他们知道月亮,这次维护双方的关系,我想让月亮来,于是常规的方式setPersons( ETs)  但是在Hibernate中这样设置关联关系行不通,你得采用这种方法getPersons().addAll(ETS),这其实是因为Hibernate保存多的时候,处理的集合不仅仅是List,它是一个继承了List的集合,所以这就是为什么要getPersons().addAll(ETS) 的原因。在使用Spring  data  JPA 的时候也要注意这个问题,不然你的保存操作就会引发异常,而自己还不知道到底发生了什么。

  我想只要弄清了多对一的关系,其他的就大同小异了。

猜你喜欢

转载自blog.csdn.net/qq_29231037/article/details/86353450