a different object with the same identifier value was already associated with the session.

session.update(Object  object)方法来对数据库进行更新的。而该方法在执行时,如果在session的缓冲区中存在与传入对象object有相同id的PO对象的话,就会抛出a different object with the same identifier value was already associated with the session.

解决办法:

用hql的方式直接对数据库进行修改

super.queryHql("update Customer u set u.email = ? where u.id = ?", obj);

参考文章

http://excon.iteye.com/blog/1085591

 

本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1670923

时间: 2025-01-27 18:51:43

a different object with the same identifier value was already associated with the session.的相关文章

Hibernate开发中常见错误总结

org.hibernate.MappingException: Unknown entity: cn.itcast.hibernate717.helloworld.Person hibernate框架根本不知道Person这个持久化类的存在 Caused by: java.sql.SQLException: Field 'id' doesn't have a default value 如果主键的生成策略采取的是identity,而数据库中表的主键不是自动生成机制,则报这样的错误 org.hib

hibernate系列(五)Session接口方法

Session接口方法主要有save.persist.load.get.update.saveOrUpdat.merge.delete等,这里主要是对我看hibernate书籍的一个实践加总结.  首先是save()方法:  以之前的Customer和Order为例,看下类文件:  ? 1 2 3 4 5 6 7 8 9 public class Customer {       private Long id;     private String name;     private Stri

Hibernate删除主从表的问题

问题描述 我现在用SSH框架做个小项目.现在遇到这样的问题,现在有五张表,一张人员表(users),一张文件表(files),一张文件操作类型表(fileOperations),一张文件夹表(folder)一张中间表(user_file_operation),中间表有三个字段(userId,fileId,operationId),这三个字段都为为外键,userId,fileId,operationId分别为三张表的主键.因为是多表关联,在pojo中所以我引申了一个类,类名为BarSnafu,这个

hibernate5(8)操纵对象入门[3]操控对象封装方法

为什么要说是"封装方法"呢?因为它帮我们封装好了底层的增删改查操作,直接调用相应方法即可灵活地操作我们数据库数据.它们由Session接口提供,下面我们通过实例一一分析这些方法. 1.save方法 Session 的 save() 方法使一个临时对象转变为持久化对象 Session 的 save() 方法完成以下操作: 1. 把 User对象加入到 Session 缓存中,使它进入持久化状态 2. 选用映射文件指定的标识符生成器,为持久化对象分配唯一的 OID.在 使用代理主键的情况下

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

问题描述 以前一直把逻辑全部放在action层的,service只是从被action调用,从daoInterfaceFactory里获得dao然后用dao执行crud,最近一直听别人说service层离数据库更近一点,于是开始尝试把业务逻辑放在service,但是出现了一个让我意想不到的问题,在service层里,我需要把数据库里的数据取出和外部传来的一个vo里的数据作比较,符合条件就更新这个vo,我把vo的id赋值为和数据库取出的那个对象的id一样的数值,然后用hibernate的templt

hibernate错误同session不同实体

a different object with the same identifier value was already associated with the session 因为在hibernate中同一个session里面有了两个相同标识但是是不同实体 可以用session.merge解决; 或者        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();        

hibernate映射对象三种状态的分析

一,首先hibernate中对象的状态有 三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate(). get().load():持久态到瞬态的方法有delete():游离态到持久态的方法有update().saveOrUpdate(). lock():持久态到游离态的方法有:session.close().session.evict().session.clear(). 二,Hibernate的状态 hiberna

关于hibernate中对象的三种状态分析

一.首先Hibernate中对象的状态有三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate().get().load():持久态到瞬态的方法有delete():游离态到持久态的方法有update().saveOrUpdate().lock():持久态到游离态的方法有:session.close().session.evict().session.clear(). 二.Hibernate的状态 hibernate的

SSH2框架整合常见错误整理【不断更新中】

又一个问题1. 当在几种框架集成的时候,在调用HibernateDaoSupport中的某个方法时会出现: java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I 的错误.这是因为在struts2自带的antlr-2.7.2.jar包的版本较低. 需要换成antlr-2.7.6.jar.其实在项目中已经存在了antlr-2.7.6.jar这个包,现在唯一需要做的就是删除antlr-2.7.2.jar包. 选择windows---