把业务逻辑从Action层移到Service层遇到的麻烦,求解

问题描述

以前一直把逻辑全部放在action层的,service只是从被action调用,从daoInterfaceFactory里获得dao然后用dao执行crud,最近一直听别人说service层离数据库更近一点,于是开始尝试把业务逻辑放在service,但是出现了一个让我意想不到的问题,在service层里,我需要把数据库里的数据取出和外部传来的一个vo里的数据作比较,符合条件就更新这个vo,我把vo的id赋值为和数据库取出的那个对象的id一样的数值,然后用hibernate的templte里的update方法,结果hibernate报异常说我有两个id重复的对象org.apache.struts2.dispatcher.Dispatcher:38 - Exception occurred during processing request: a different object with the same identifier value was already associated with the session: [com.gameo.vo.GameChartsSingle#1]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.gameo.vo.GameChartsSingle#1]

解决方案

数据库中的那条记录已经和数据库取出的那个对象进行了绑定,你那个vo设置id后,hibernate的session认为vo是一个新的对象,对其进行插入操作,由于主键重复造成操作失败,你把vo的属性依次复制到数据库取出的那个对象,更新那个对象就可以了。

时间: 2024-09-20 19:33:40

把业务逻辑从Action层移到Service层遇到的麻烦,求解的相关文章

Struts2 处理多个业务逻辑的Action详解

strut2 允许用户自定义个业务控制器方法 默认的情况下是execute() 然而我们可以自定义方法,从而使得同一个action可以处理多个业务逻辑 例如 1.我们的action  代码如下 复制代码 public class myAction extends Actionsupport {      @Override      public String execute() throws Exception     {           //默认业务处理方法     }     @Ove

ssh框架的。。购物车用数据库dao层,service层,和action层怎么写啊

问题描述 ssh框架的..购物车用数据库dao层,service层,和action层怎么写啊 求大神给指点一下!!!!!!!!!!!!!!!!!!谢谢了!!!!!!!!!!!!!!!!!! 解决方案 dao层和service层Android中的分层----service 层domain层,dao 层,action层等设计Action层 Service层 ,modle层 和 Dao层的作用? 解决方案二: Action层 Service层 ,modle层 和 Dao层的作用?Action层 Ser

service层设计-关于三层架构中service dao 和实体的设计实现的疑问

问题描述 关于三层架构中service dao 和实体的设计实现的疑问 在 java 的三层架构中一直有几个问题困扰着我一直不得解决,特在此请教各位大神,还请各位大大,不腻赐教 场景: 加入现在是一个教务系统里面包含数据库表 课程表,学生表,学生购买的课程表 课程表 学生表 学生购买的课程表 这个时候如何设计实体类呢 学生实体1 public class student { private Integer id; private String name; private String birth

Service层getParameter方法接受字符转换成int类型

String类型转化成int类型,不论哪种情况,在java中都能转化. 无论是在domain实体类中,还是在Dao(数据访问层),Service层(服务层)也行. 除去强制转换,项目开发总一共还有两种方法 public void getPost(HttpServletRequest request){ String str = request.getParameter("classId"): //方法一 int classId = Integer.parseInt(request.ge

ASP.NET2.0数据操作之创建业务逻辑层

asp.net|创建|数据 导言 本教程的第一节所描述的数据访问层(Data Access Layer,以下简称为DAL)已经清晰地将表示逻辑与数据访问逻辑区分开了.不过,即使DAL将数据访问的细节从表示层中分离出来了,可它却不能处理任何的业务规则.比如说,我们可能不希望产品表中那些被标记为"停用"的产品的"分类编号"或"供应商编号"被更新:我们还可能需要应用一些资历规则,比如说我们都不希望被比自己的资历还要浅的人管理.另外一个比较常见的情况就是

ASP.NET 2.0数据操作之创建业务逻辑层

导言 本教程的第一节所描述的数据访问层(Data Access Layer,以下简称为DAL)已经清晰地将表示逻辑与数据访问逻辑区分开了.不过,即使DAL将数据访问的细节从表示层中分离出来了,可它却不能处理任何的业务规则.比如说,我们可能不希望产品表中那些被标记为"停用"的产品的"分类编号"或"供应商编号"被更新:我们还可能需要应用一些资历规则,比如说我们都不希望被比自己的资历还要浅的人管理.另外一个比较常见的情况就是授权,比如说只有那些具有特殊

Scott Mitchell的ASP.NET 2.0数据教程之二:创建一个业务逻辑层

返回"ASP.NET 2.0数据教程目录" 导言 本教程的第一节所描述的数据访问层(Data Access Layer,以下 简称为DAL)已经清晰地将表示逻辑与数据访问逻辑区分开了.不过,即使DAL将 数据访问的细节从表示层中分离出来了,可它却不能处理任何的业务规则.比如 说,我们可能不希望产品表中那些被标记为"停用"的产品的" 分类编号"或"供应商编号"被更新:我们还可能需要应用一些 资历规则,比如说我们都不希望被比自己的

在ASP.NET 2.0中操作数据之二:创建一个业务逻辑层_自学过程

导言 本教程的第一节所描述的数据访问层(Data Access Layer,以下简称为DAL)已经清晰地将表示逻辑与数据访问逻辑区分开了.不过,即使DAL将数据访问的细节从表示层中分离出来了,可它却不能处理任何的业务规则.比如说,我们可能不希望产品表中那些被标记为"停用"的产品的"分类编号"或"供应商编号"被更新:我们还可能需要应用一些资历规则,比如说我们都不希望被比自己的资历还要浅的人管理.另外一个比较常见的情况就是授权,比如说只有那些具有特殊

《解剖PetShop》系列之五:PetShop之业务逻辑层设计

业务逻辑层(Business Logic Layer)无疑是系统架构中体现核心价值的部分.它的关注点主要集中在业务规则的制定.业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候,我们也将业务逻辑层称为领域层.例如Martin Fowler在<Patterns of Enterprise Application Architecture>一书中,将整个架构分为三个主要的层:表示层.领域层和数据源层.作为领域驱动设计的先驱Eric Evans