多对多拆成两个 多对一

hibernate给我们提供了太多的方便,其中之一就是对于关系的映射非常的方便,hibernate的映射分为两大类,一类是注释映射,一类是我们常用的配置文件映射。如果想了解更多,请参考http://www.esnsc.com/news244.html(hibernate的映射)

今天就谈谈使用多对多的感想。

多对多的用处有很多,比如专题和文章,这是常用的新闻系统。一个专题下有很多文章,同样一个文章可以属于多个专题,那么这就是多对多,

但是如果我们使用hibernate的多对多的话,会出现两个严重的问题:

1)多对多基于中间表,那么中间表是无法操作的。你无法查询出该专题下的所有文章来,因为你无法对集合分页。

2)采用中间表,中间表无法操作。你无法给这个中间表中加任何多余的但是你常用的业务属性。因为不是一个实体类。

所以,基于以上两点缺点,我们往往将多对多改成两个一对多,这样就相当于将中间表也拿出一个实体类了,你不但可以分页,也可以加任何你想要加的其他业务属性。

但是注意,在加其他业务属性的时候,一定要注意适可而止。以为你一旦使用了中间表为实体类,那么你就必须在操作两端的时候都切忌要操作中间表这个实体类,比如你在中间实体类中加入了一个新闻标题这个属性(为什么要加这个业务属性,因为在查询中间表的时候,不想要级联,最好就将常用的属性,查询所有list的时候常用的属性都放进去,这样你就不用进行级联了),那么你在修改了这个新闻的时候,必须记得将该中间实体类的有关记录进行修改。

但是由于在平时操作中,查询是经常的,而增加删除修改相对于查询是少的多,所以为了不级联操作而增加适当的业务属性是可用的。

 

posted @ 2014-08-26 17:18  Struts-pring  阅读(647)  评论(0编辑  收藏  举报