`
cuixuelei
  • 浏览: 49386 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Hibernate数据库查询出现的错误

阅读更多

错误:org.springframework.orm.hibernate3.HibernateSystemException: a different object with the same identifier value was already associated with the session: [com.blt.myoa.po.oaattendance.TbPersonnelInfo#12]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.blt.myoa.po.oaattendance.TbPersonnelInfo#12]

大体意思:两个session在同时操作一个Object.

出现的原因是:查询了一下对象,紧接着对该对象进行修改(update),结果出错了。

解决方法: hibernate后台update 换成 merge

 

下面是摘自javaeye上的文章:

今天做了个测试,写了个测试用例来看看merge与update时控制台打印出来的日志有什么不一样。实体bean很简单,就id和name两个字段,接下来分别给出以下几种测试情形的控制台日志内容:

1. 数据库记录已存在,更改person的name为一个新的name。

merge方法打印出的日志如下:
Hibernate: select person0_.id as id0_0_, person0_.name as name0_0_ from person person0_ where person0_.id=?
Hibernate: update person set name=? where id=?

update方法打印出的日志如下:
Hibernate: update person set name=? where id=?

2. 数据库记录已存在,更改person的name和数据库里对应id记录的name一样的值。

merge方法打印出的日志如下:
Hibernate: select person0_.id as id0_0_, person0_.name as name0_0_ from person person0_ where person0_.id=?
此处相对于第一种情形少了update的动作

update方法打印出的日志如下:
Hibernate: update person set name=? where id=?

3. 数据库记录不存在时,也就是你传的实体bean的ID在数据库没有对应的记录。

merge方法打印出的日志如下:
Hibernate: select person0_.id as id0_0_, person0_.name as name0_0_ from person person0_ where person0_.id=?
Hibernate: insert into person (name) values (?)
如果没有对应的记录,merge会把该记录当作新的记录来插入。此处我很疑惑,因为我传得person实体对象里写明了id值的,它为什么还会做插入的动作呢?

update方法打印出的日志如下:
Hibernate: update person set name=? where id=?
2009-11-22 20:59:55,359 ERROR [org.hibernate.jdbc.AbstractBatcher] - Exception executing batch:
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

以下的内容摘抄自网上:
  当我们使用update的时候,执行完成后,我们提供的对象A的状态变成持久化状态。
  但当我们使用merge的时候,执行完成,我们提供的对象A还是脱管状态,hibernate或者new了一个B,或者检索到 一个持久对象B,并把我们提供的对象A的所有的值拷贝到这个B,执行完成后B是持久状态,而我们提供的A还是托管状态。

分享到:
评论

相关推荐

    Hibernate数据库事务

    文档内容的来源与我的博客,如果文档中相关的内容有所格式错误,请参考我的博文专栏,还请见谅,文章讲解的主要技术是Hibernate相关。如有差错还望海涵!

    Spring hibernate SpringMVC整合对数据库操作

    Hibernate是一款优秀的ORM框架,能够连接并操作数据库,包括保存和修改数据。Spring MVC是Java的web框架,能够将Hibernate集成进去,完成数据的CRUD。Hibernate使用方便,配置响应的XML文件即可。由于spring3.x,基于...

    Hibernate通用数据库操作方法

    一个经过测试,可用的hibernate数据库操作的方法 可重用性强,没有错误。

    Hibernate连接数据库模拟

    本项目主要用JavaDom解析xml文件模拟Hiberntate连接数据库。 注:本项目只做学习之用。有错误希望指出

    Android数据库hibernate框架.

    * ,增改支持对象化操作:增删改是数据库操作的最基本单元,不用重复写这些增删改的代码,并且添加和更新支持类似于hibernate中的对象化操作. * 3.查询方式灵活:支持android框架提供的方式,也支持原生sql方式. * 4....

    利用hibernate+spring配置proxool连接池连接Access数据库

    proxool-0.9.1(my).jar 包是我修改了proxool-0.9.1后的jar包,修改后可以完全支持spring配置,并添加了charSet配置属性,用于配置数据库链接的设置默认字符集,并且解决了proxool数据库连接池报如下错误的问题:...

    jqueryUi+jqGrid+spring+hibernate+struts1.2+mysql 完美例子(带数据库文件)

    当时写的时候用的是JDK1.4,没有在JDK1.5下做测试,但在jdk1.5下应该没什么大问题,最多出现语法错误。 用的UTF-8编码。 有问题可在下载页面的评论处留言,有时间我会来看看,并回复。 或者要JAR包及问题,可发...

    Hibernate Annotations 中文文档

    4.2.1. 数据库schema层次验证 4.2.2. Hibernate基于事件的验证 4.2.3. 程序级验证 4.2.4. 验证信息 5. Hibernate与Lucene集成 5.1. 使用Lucene为实体建立索引 5.1.1. 注解领域模型 5.1.2. 启用自动索引

    Spring3 MVC +HibernateJPA Eclipse Demo

    1、本示例只是借花献佛,其实网上SpringMVC+...7、附带的另一个附件关于JPQL的学习资料,本示例只提供了CURD四个方法,其他复杂的数据库查询实现需要好好学习JPQL.pdf上的资料 8、写了那么多,希望大家能给我一分

    hibernate annotation 中文文档

    4.2.1. 数据库schema层次验证 4.2.2. Hibernate基于事件的验证 4.2.3. 程序级验证 4.2.4. 验证信息 5. Hibernate与Lucene集成 5.1. 使用Lucene为实体建立索引 5.1.1. 注解领域模型 5.1.2. 启用自动索引 A. 术语表

    深入浅出Hibernate源码

    (假若您希望使用其它用户名如root,您需要修改hibernate的数据库配置中的连接参数——位于hibernate.cfg.xml中,以及创建数据库表时的连接参数——位于build.xml中。) 7, 确认ant安装正确. ant可以在此下载: ...

    struts+spring+hibernate图书管理系统 | 毕业设计

    程序测试环境: MyEclipse8.5编程软件 + Win7操作系统 + MySql5.0数据库 本系统使用Struts2.0 + Spring2.0 +Hibernate 3.2 (即:SSH)及以上版本架构整合模式开发 本系统作为学生学习SSH很有参考价值,实现了图书...

    jsf + hibernate + spring入门用例

    这是一个比较完整的关于JSF ...否则转向错误的页面。 程序简单易于理解! 实例的工程JASAH (JSF And Spring And Hibernate) 数据库脚本文件user 本例采用的是Mysql数据库 注意:启动服务器后,在地址栏输入如下: ...

    基于Jsp的在线考试系统毕业设计论文

    hibernate的本地sql查询支持任何长度的字符串查询,然而当mysql中的字段变成text类型时,hibernate一定会报一个“type=-1“的错误,这是我们组在导入试题时发现试题名称和选项太短而把数据库改成text类型是发现的。...

    Java连接达梦数据库驱动dm_jdbc

    Java连接达梦数据库驱动dm_jdbc: dm_jdbc\com.dameng.floader.jar dm_jdbc\com.dameng.impexp.jar dm_jdbc\Dm7Dictionary.jar dm_jdbc\Dm7JdbcDriver14.jar dm_jdbc\Dm7JdbcDriver15.jar dm_jdbc\Dm7JdbcDriver16....

    Struts+Hibernate做的BBS

    ⑵、修复多处因在线更新导致的提示未定义变量的错误; ⑶、修复验证码不显示的问题; ⑷、使“选择风格”选项出现在顶部导航中; ⑸、修复官方自带第二、三个风格首部及尾部图片不显示的问题; ⑹、修复直接通过Mini...

    基于Struts2+Spring+Hibernate+MySql的注册登录系统

    基于Struts2+Spring+Hibernate+MySql的注册登录系统 SSH实例 入门实例 Java EE简单实现例子

    基于J2EE短信共享网站设计(Spring+Struts2+Hibernate)

    调试出现错误: 1.点击一个网页,进不去,出错误!编码问题,导致中文字符写不到数据库中,需要修改Mysql文件夹下 my.ini 文件,默认字符集修改(二处)为utf8 2.初始不了SessionFactory 可能是二级缓存初始化问题,...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    12.3 使用Hibernate操作数据库的示例 12.3.1 创建数据库表 12.3.2 编写表对应的JavaBean 12.3.3 编写JavaBean对应的Xml 12.3.4 编写Hibernate的配置文件 12.3.5 编写并验证测试程序 12.4 Hibernate的配置文件 12.4.1...

    Hibernate v3.2中文参考手册

    如果你对Hibernate和对象/关系数据库映射还是个新手,或者甚至对Java也不熟悉,请按照下面的步骤来学习。 <br>阅读第 1 章 Hibernate入门 ,这是一篇包含详细的逐步指导的指南。本指南的源代码包含在发行包中,...

Global site tag (gtag.js) - Google Analytics