以前使用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是一种开源的对象关系映射(ORM)框架,广泛应用于Java应用程序中,用于处理数据库交互。该书旨在为读者提供深入的Hibernate 3理解和应用能力。 #### 二、对象关系映射(ORM)概述 - **定义**:对象关系...
- **社区论坛**:用户可以在论坛中交流心得、解决问题。 - **示例项目**:官方提供的示例项目有助于理解如何使用这些工具。 #### 二、下载与安装 **Hibernate Tools**的安装主要分为以下几个步骤: ##### 2.1 ...
本篇将详细探讨“Hibernate插入数据”的相关知识点,结合学习心得,深入理解并掌握其核心原理与实践技巧。 首先,Hibernate通过对象关系映射(ORM)技术,将数据库表与Java类关联起来,使得数据库操作可以通过对象...
文档内容不仅涵盖了Hibernate的基本使用方法,还融入了作者在实际项目中的经验积累以及与Hibernate官方论坛中多位技术专家的交流心得。 #### 二、目的与定位 本文档并非旨在取代Hibernate官方参考手册(Hibernate ...
- **主要内容**:涉及Hibernate框架的使用方法、实践经验以及作者在Hibernate官方论坛上的交流心得。 - **定位区别**:不同于Hibernate官方参考文档(Hibernate Reference),本文档旨在为开发者提供一个学习和掌握...
本书不仅涵盖了Hibernate的基础概念和核心功能,还融入了作者在实际项目中的应用经验和与Hibernate社区专家交流的心得,使其内容更加丰富和实用。 ### Hibernate开发指南概览 #### 准备工作 - **环境搭建**:首先...
本文档主要介绍了Hibernate的使用方法和技术要点,不仅涵盖了Hibernate的基础知识,还融入了作者的实际工作经验及在官方论坛与其他技术专家交流的心得。作者强调本文并不是要取代Hibernate官方参考文档,而是旨在为...
在Java开发领域,框架的应用是不可或缺的一部分,它们极大地提高了开发效率和代码质量。本文主要探讨的是SSH框架,即Struts、Spring和Hibernate的使用...在与同行的交流中,可以碰撞出更多的灵感和解决方案,共同进步。
- **定义**: Hibernate是一款流行的开源对象-关系映射(ORM)引擎,提供了一种将Java对象与数据库表之间的映射方式。 - **特点**: - 多种映射策略:支持一对一、一对多等多种映射方式。 - 可迁移的持久化:方便地...
### Spring框架在Java开发中的应用与心得 #### 一、Spring框架概述 Spring框架自2004年发布以来,迅速成为了Java开发领域中最受欢迎的企业级应用开发框架之一。其核心设计思想旨在解决传统Java应用开发中存在的...
本资源“hibernate1.rar”正是针对这个主题,提供了作者个人在使用Hibernate过程中的实践经验和心得,旨在帮助初学者和进阶者更好地理解和应用Hibernate。 首先,让我们了解一下Hibernate的基本概念。Hibernate是...
该系统还强调了“大家一起交流”,意味着它可能具备论坛或者讨论区功能,允许用户互动,分享学习心得,提问和解答问题。这样的功能可能需要用到Spring MVC中的Controller来处理用户提交的讨论内容,而Struts则负责...
在RunCommunity项目中,Hibernate被用来处理数据库操作,如用户信息、跑步记录等数据的存储和检索。通过Hibernate,开发者可以避免编写大量的SQL语句,转而使用面向对象的方式来操作数据库,提高了开发效率并降低了...
该论坛旨在为养鱼爱好者提供一个分享经验、交流心得、获取专业知识的平台。本项目采用了JAVAEE技术栈,包括SSH框架(Struts2、Spring、Hibernate)和SQL Server数据库管理系统。 #### 第1章 引言 ##### 1.1 项目...
Hibernate 3是一个流行的ORM(对象关系映射)框架,它消除了Java应用与数据库之间的低级交互,通过映射Java对象到数据库表,使得开发者可以使用面向对象的方式来处理数据。Hibernate 3提供了一套完整的查询语言HQL,...
通过贡献代码,你可以看到实际项目中的问题处理,了解不同团队的编码规范,同时也可以获得社区的反馈和指导。例如,参与Apache或GitHub上的Java项目,可以让你在实践中不断提升。 最后,保持对Java技术的跟踪和更新...
这样的系统旨在提供一个集讨论、分享、组织活动于一体的交流空间,用户可以在此交流运动心得,寻找运动伙伴,发布比赛信息等。 【描述】中提到,这个论坛系统是为新手设计的,意味着它的代码结构和逻辑相对清晰,...
【计算机实习日记】系列主要记录了作者在计算机相关岗位实习过程中的体验和学习心得,涉及了编程、服务器配置、数据库管理、开源框架应用等多个方面。以下是根据日记内容提炼的知识点: 1. **实习的重要性**:实习...
在图书点评网站中,Hibernate可能是用于处理图书、用户、评论等数据的主要工具。 论文中提到,网站采用了MyEclipse作为开发环境,这是一款集成开发环境(IDE),支持多种Java应用开发,包括SSH项目。Tomcat服务器则...