hibernate中的关系处理
以前使用hibernate的时候关系都是根据业务来处理的,也就是对象间的关系没有设置,仅仅设置一个ID外键来做关联,感觉对象的管理蛮方便的,研究了领域驱动设计很长时间了。最近一个项目使用了hibernate的关系,但是怎么处理起来都觉得别扭,举个例子:
用户和用户组以及角色三个实体:即:User,UserGroup,Role他们的关系为User和UserGroup为many-to-many,UserGroup和Role为many-to-many,关系都为双向的。
开始的整体结构为:
dao层:封装简单的dao的操作,没有处理关联关系
service层:处理业务逻辑,涉及到关系的处理,调用dao层
别扭得地方:
1.如果在UserGroup对User上设置了级联插入关系:
那么当插入UserGroup的时候,UserGroup中的User集合也会插入,但是这个时候如果有业务上的要求,用户名必须唯一,级联插入的时候抛异常,的确这个情况我们还是可以处理的,但是必须知道会抛什么异常,然后catch住了之后,抛出自己的业务异常,感觉处理起来不是很流畅,如果在User设置对UserGroup级联插入,情况可能更复杂,比如UserGroup对Role也设置了级联插入。不知道这种情况大家如何处理。
2.如果所用的级联关系都没有设置,全部由业务来决定
a.如果用户在前台在保存User时,设置了User中的UserGroup集合,但是UserGroup集合并没有在库中,那么我们要先保存UserGroup集合到数据库中,同时UserGroup又包含Role的集合,也是先保存到数据库中,因为是EJB项目涉及到远程调用,确保一次调用能做更多的操作。
这样的话,会发现UserService会有很多代码会和UserGroupService相同,因为保存User的时候涉及到UserGroup保存,可能还会涉及到查找,这样如果不是代码copy,就是UserService依赖UserGroupService显然不合理,当然UserGroup和UserService可以合并成一个Service,但是可能会导致合并后的Service膨胀。可能是Service划分不合理,不知道大家是怎么处理的。
b.鉴于以上原因UserGroupService和UserService仅仅处理简单的插入,处理简单的关系,然后提供一个供远程调用的会话门面,门面中包含UserGroupService和UserService,然后处理关系,可以很好解决a中遇到的情形,但是会发现service中有很多方法只是简单的调用dao中的方法,另外门面中也有很多方法只是简单的调用service中的方法,感觉处理的很别扭。
各位牛人,大家一起交流一下,不知道大家理解清楚了没有?
相关视频
相关阅读 Hibernate经验总结Hibernate经验总结MyEclipse配置struts+hibernate+springSoundflower怎么使用 Soundflower使用教程iPadOS beta 2下载 iPadOS beta 2固件下载地址iOS 13 beta 2下载 iOS 13 beta 2固件下载地址macOS 10.15支持哪些设备升级 macOS Catalina可升级设备一览macOS 10.15有什么新功能 macOS Catalina新功能详细介绍
热门文章 JS文件中的中文在网页
最新文章
JS文件中的中文在网页关于一些Play 1.0.1资
JAVA中抽象类与接口的区别Java技巧:关于Cookie的操作JAVA AWT图形用户界面设计巧用Java将Word转换为Html网页文件
人气排行 JS文件中的中文在网页上显示为乱码解决方法怎么为Java程序添加漂亮背景图片代码JAVA AWT图形用户界面设计怎样获取java线程中信息JS简介及特点Java面向对象编程学习总结js鼠标滑过切换层效果代码下载教你java使用回调和线程处理响应全过程
查看所有0条评论>>