在web controller新增加了一个po状态的校验,即将系统中该记录的一个状态值先取出比较web上已经有的状态判断是否发生过变化。exception出现在update这个record的时候。系统报a different object with the same identifier value was already associated。
@RequestMapping(params = "_p_action=save")
public ModelAndView save(HttpServletRequest req, HttpServletResponse res,
ItemCostNpriceChg itemCostNpriceChg) throws Exception {
ModelAndView modelAndView = new ModelAndView("jsonView");
Set<ItemCostNpriceDtl> itemCostNpriceDtls = new HashSet<ItemCostNpriceDtl>();
HashMap<String, Object> ret = new HashMap<String, Object>();
Credential user = userManager.getCredential();
try {
if (itemCostNpriceChg.getAppNo() == null) {
itemCostNpriceChg = (ItemCostNpriceChg) CommUtils
.copy(itemCostNpriceChg);
itemCostNpriceChg.setBuyer(user.getUserID());
itemCostNpriceChg = itemPriceAdjustService
.add(itemCostNpriceChg);
itemCostNpriceDtls = buildChangeDetail(req, itemCostNpriceChg,
"add");
itemPriceAdjustService
.saveItemCostNpriceDtls(itemCostNpriceDtls);
ret = buildWebReturn(itemCostNpriceChg);
} else {
if (!user.getUserID().equalsIgnoreCase(
itemCostNpriceChg.getCreatedBy()))
throw new BusinessException(
"You have no right to update the application that other created!",
"appNo");
if (itemCostNpriceChg.getAppStatus() != 0
&& itemCostNpriceChg.getAppStatus() != 4)
throw new BusinessException(
"You can not save the record that was completed!",
"appNo");
ItemCostNpriceChg check=new ItemCostNpriceChg();
check=itemPriceAdjustService.getById(itemCostNpriceChg.getAppNo());
if(check.getAppStatus().compareTo(itemCostNpriceChg.getAppStatus())!=0)
throw new BusinessException(
"The statuc of the application has been changed ! pls reload the application.",
"btnNew");
check = (ItemCostNpriceChg) CommUtils
.copy(itemCostNpriceChg);
itemCostNpriceChg=null;
// boolean check=itemPriceAdjustService.checkAppStatus(itemCostNpriceChg.getAppNo(),itemCostNpriceChg.getAppStatus());
// if(!check)
// {
// throw new BusinessException(
// "The statuc of the application has been changed ! pls reload the application.",
// "btnNew");
// }
// itemCostNpriceChg.setBuyer(user.getUserID());
// itemCostNpriceChg.setCreatedBy(user.getUserID());
// itemCostNpriceChg.setCreatedTime(DateUtil.getServerDate());
// itemPriceAdjustService.update(itemCostNpriceChg);
// itemCostNpriceDtls = buildChangeDetail(req, itemCostNpriceChg,
// "update");
// itemPriceAdjustService
// .saveItemCostNpriceDtls(itemCostNpriceDtls);
check.setBuyer(user.getUserID());
check.setCreatedBy(user.getUserID());
check.setCreatedTime(DateUtil.getServerDate());
itemPriceAdjustService.update(check);
itemCostNpriceDtls = buildChangeDetail(req, check,
"update");
itemPriceAdjustService
.saveItemCostNpriceDtls(itemCostNpriceDtls);
ret = buildWebReturn(check);
}
modelAndView.addObject("data", ret);
modelAndView.addObject("success", true);
logger.debug(modelAndView.toString());
} catch (BusinessException e) {
e.printStackTrace();
logger.error(e);
modelAndView.addObject("success", false);
modelAndView.addObject("message", e.getMessage());
modelAndView.addObject("target", e.getTarget());
} catch (Exception e) {
e.printStackTrace();
logger.error(e);
modelAndView.addObject("success", false);
modelAndView.addObject("message", e.getMessage());
}
return modelAndView;
}
注释部分就是出错代码。分析问题是session中的实体与系统又取出的实体都是在session中,但update时候就会报错。因此有二种解决方法:
1.将session中的
public ModelAndView save(HttpServletRequest req, HttpServletResponse res,
ItemCostNpriceChg itemCostNpriceChg)
itemCostNpriceChg去除,对数据库中po进行赋值操作。
代码会多很多,不采用
2.将使用merge方法,merge和update的区别是,hibernate会将用户要求的pocopy到session中的po中,因此不会引发冲突
分享到:
相关推荐
hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-4.1.12.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar ...
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
《深入理解Hibernate配置与映射:hibernate-configuration-3.0.dtd与hibernate-mapping-3.0.dtd解析》 在Java世界里,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而`hibernate-...
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码 hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码
在本文中,我们将深入探讨`hibernate-commons-annotations-5.0.1.Final.jar`的源码,了解其内部结构和主要功能。 一、元数据注解 HCA的核心在于提供了一系列的注解,如`@Entity`、`@Table`、`@Column`、`@Id`等,...
很多人为了配置jpa找这个动态产生字节码的jar文件,hibernate-distribution-3.3.1.GA包太大,而hibernate-distribution-3.3.2.GA的jar没有这个jar文件,希望对大家有用
hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final-sources.jar hibernate jpa 源代码
hibernate-core-5.4.24.Final.jar
hibernate-commons-annotations-4.0.1.Final.jar
使用hibernate-validator 进行校验的jar包,里面包括了基础hibernate-validator-5.0.0.CR2.jar hibernate-validator-annotation-processor-5.0.0.CR2.jar 之外,还包括了el-api-2.2.jar javax.el-2.2.4等项目必不可...
`hibernate-jpa-2.1-api-1.0.0.final.jar`是Hibernate对JPA 2.1规范的实现库,它使得开发者能够使用Hibernate的高效功能同时遵循JPA规范。 **1. Hibernate与JPA的关系** Hibernate最初作为一个独立的ORM框架,后来...
Hibernate稳定版(hibernate-release-5.3.23.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。
hibernate-commons-annotations-5.1.0.Final.jar
hibernate-mapping-3.0.dtd 配置后,就会在xml中进行提示
hibernate-jpa-2.1-api-1.0.0.Final.jar官方下载,请放心使用
javaEE框架Hibernate安装包 hibernate-release-5.0.7.Final
hibernate-release-5.0.7.Final压缩包 -document -lib -project 内部Hibernate依赖库: antlr-2.7.7.jar dom4j-1.6.1.jar geronimo-jta_1.1_spec-1.1.1.jar hibernate-commons-annotations-5.0.1.Final.jar ...
本文将重点探讨`hibernate-core-5.0.11.Final.jar`的核心源码,帮助读者深入理解其内部机制,并提供实用的应用指导。 一、Hibernate Core概述 Hibernate Core是Hibernate框架的基础部分,它包含了ORM的核心功能,...