- 浏览: 333128 次
- 性别:
- 来自: 安徽
文章分类
最新评论
-
fanjf:
因为不是太懂,所以摘录!
DataStage---向目的库插入时出现问题:MLOG$ -
fanjf:
oracle 位图索引:位图索引: 解决某一表数据很多,但某一 ...
【转】 mysql 添加列,修改列,删除列。 -
fanjf:
创建索引:CREATE TABLE mm (m1 CHAR(1 ...
【转】 mysql 添加列,修改列,删除列。 -
fanjf:
查询mysql 的表emp 的约束:
SELECT * FR ...
【转】 mysql 添加列,修改列,删除列。 -
fanjf:
为什么 update 不报错,结果为空?
关于MYSQL 检查check约束
net.sf.hibernate.NonUniqueObjectException:
a different object with the same identifier value was already associated with the session: .........
今天遇到这样的报错异常,网上搜索答案,以下的代码逻辑就会出现该异常:
SessionFactory sessionFactory= new Configuration().configure().buildSessionFactory();
Session session=sessionFactory.openSession();
User user1=new User("anray");
User user2=new User("anray");
//假设User是一个持久对象,有一个name属性
user1.setName("anray1");
user2.setName("anray2");
session.update(user1);
session.update(user2);
这样的代码,我们一般不可能会这样写,但有时,我们回写一个专门的类来管理sessionFactory和session,如:
package com.cpic.p17.pf.dao;
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
/**
* Hibernate DAO实现
* @author fanjf
* @date 2012-3-22
*/
public class HibernateDao {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (HibernateException ex) {
throw new RuntimeException("Exception building SessionFactory: " + ex.getMessage(), ex);
}
}
public static final ThreadLocal threadLocal = new ThreadLocal();
/** 得到当前线程的session */
public static final Session getSession() throws HibernateException {
Session se = (Session) threadLocal.get();
// Open a new Session, if this Thread has none yet
if (se == null) {
se = sessionFactory.openSession();
threadLocal.set(se);
}
return se;
}
/** 关闭当前线程的session */
public static final void closeSession() throws HibernateException {
Session s = (Session) threadLocal.get();
threadLocal.set(null);
if (s != null)
s.close();
}
/**
*保存一个对象到数据库中,使用完后要自己调用closeSession()
*/
public static void create(Object object) throws HibernateException {
Session session1 = getSession();
Transaction transaction1 = session1.beginTransaction();
try {
session1.save(object);
transaction1.commit();
} catch (HibernateException ex) {
if (transaction1 != null)
transaction1.rollback();
closeSession();
throw ex;
}
}
/**
*更新一个对象到数据库中,使用完后要自己调用closeSession()
*/
public static void update(Object object) throws HibernateException {
Session session1 = getSession();
Transaction transaction1 = session1.beginTransaction();
try {
session1.update(object);
transaction1.commit();
} catch (HibernateException ex) {
if (transaction1 != null)
transaction1.rollback();
closeSession();
throw ex;
}
}
}
如果在web编程时用这个类的方法来更新一个user对象,在调用了HibernateUse.update(user)后,没有接着调用HibernateUse.closeSession(),其实为了节省资源也不提倡每次操作都调用HibernateUse.closeSession()关闭session;如果对相同的user对象进行又一次的更新时,碰巧容器又分配了同一个thread进行处理,那么得到的也是同一个session,这样就出现了上面的提到了问题,session里的两个user的识别id一样,但内容不一样。
为了解决这个问题可以在update前清空session(不是关闭,这样资源消耗比较少),修改后的公用类如下:
(就是在update()方法里添加了session1.clear();)
/**
*更新一个对象到数据库中,使用完后要自己调用closeSession()
*/
public static void update(Object object) throws HibernateException {
Session session1 = getSession();
Transaction transaction1 = session1.beginTransaction();
try {
session1.clear();//更新对象前,清空session
session1.update(object);
transaction1.commit();
} catch (HibernateException ex) {
if (transaction1 != null)
transaction1.rollback();
closeSession();
throw ex;
}
}
发表评论
-
JAVA 统一追加扩展名类
2014-07-07 15:34 981最近有人反应某云盘,无法上传视频,我也倍受困扰,后来发现MD ... -
java中替换字符以及回车换行
2014-02-14 13:47 1910[java] view plaincopy 1. / ... -
[转]java中替换字符以及回车换行
2013-11-13 09:18 3402//第一种方式 import java.util.r ... -
Caused by: java.lang.OutOfMemoryError: PermGen space
2013-07-30 16:43 680Caused by: java.lang.OutOfMemo ... -
nested exception is java.sql.BatchUpdateException: 批处理中出现错误: ORA-00972: 标识符过长
2013-07-30 16:21 4439最近开发项目,跑批处理遇到一个问题: 2013-07-28 ... -
软件架构师必读书籍--------软件架构师推荐书籍系列
2012-09-23 17:02 4091一、架构篇 1. 《Softw ... -
【异常】Error configuring application listener of class xxx.xxx.xxx
2012-04-01 11:26 4763严重: Error configuring applicati ... -
Java复制、移动、删除、获取大小文件
2012-03-31 11:12 1799利用Apache Commons IO工具包(commons- ... -
Java中的Enum简单例子
2012-03-31 11:12 1327package com.util.enumclass; /* ... -
Java中的Enum的使用与分析
2012-03-30 11:28 939示例: package com.util.enumclass ... -
分享文件一个上传工具类
2012-03-30 10:57 961最近在搭建一个项目,需要用到很多通用的工具类,自己也写了几个。 ... -
缩放图片工具类,创建缩略图、伸缩图片比例
2012-03-30 10:54 862支持将Image的宽度、高度缩放到指定width、height ... -
Java创建、重命名、删除文件和文件夹
2012-03-30 10:52 1644package test.file; import java ... -
Java操作文件工具类
2012-03-30 10:48 1084JAVA API关于操作文件基础类太少,而且缺乏很多使 ... -
java获得实例对象的几种方法
2012-03-29 17:49 1028// 1.new Dog d1 = new Dog ... -
Java虚拟机原理
2012-03-22 15:47 826一、什么是Java虚拟机 ... -
【异常】org.springframework.orm.hibernate3.HibernateQueryException
2012-03-20 10:44 2997今天新同事遇到一个异常,通过如下方法做一个单元测试: /** ... -
【异常】javax.imageio.IIOException: Can't get input stream from URL!
2012-03-19 11:42 9657Exception in thread "main& ... -
Error reading tld listeners java.lang.NullPointerException
2012-03-16 17:40 1562在学习【FreeMarker整合Spring 3.0】时把相应 ... -
Java中hashmap和hashtable的区别
2012-03-01 16:18 7981、 继承和实现区别 Hashtable是基于陈旧的D ...
相关推荐
`net.sf.json`是开源项目Apache软件基金会下的一个Java库,它提供了对JSON的支持,包括将Java对象转换为JSON格式以及将JSON字符串反序列化回Java对象的功能。 `net.sf.json`库主要包含以下功能点: 1. **JSON与...
net.sf.json.JSONObject是开源项目Apache Jakarta的一个子项目,提供了一个Java对象到JSON和JSON到Java对象的映射库。这个库允许开发者通过简单的API来操作JSON,从而实现数据的序列化和反序列化。 标题中的...
`net.sf.json` 是一个广泛使用的开源JSON库,主要用于Java应用程序中处理JSON(JavaScript Object Notation)数据。JSON是一种轻量级的数据交换格式,它使得人和机器都能容易地读写数据,通常用于Web服务和客户端...
标题“net.sf.json2.4”指的是一个特定版本的JSON库,它是在Java环境中处理JSON数据的一个工具包。这个库的主要功能是帮助开发者在Java应用程序中生成和解析JSON(JavaScript Object Notation)字符串,这是一种轻量...
标题中的"net.sf.json需要的jar"指的是在Java开发中使用net.sf.json库时所需的依赖JAR文件。net.sf.json是开源项目,它提供了一系列的API来处理JSON(JavaScript Object Notation)数据格式,便于Java应用程序与JSON...
为了在Java中处理JSON数据,开发者通常会使用特定的库,如`net.sf.json`包,这是一个非常实用的JSON库,提供了丰富的功能来创建、解析和操作JSON对象。 `net.sf.json`库主要包含了两个核心类:`JSONObject`和`...
"net.sf.json.JSONObject"是开源项目json-lib中的一个核心类,它提供了用于处理JSON对象的功能。这个Jar包是为Java开发者提供的一种便捷的方式来在Java对象与JSON数据之间进行转换。 JSONObject是net.sf.json库中的...
标题 "net.sf.json.JSONObject相关jar包.zip" 指的是一个包含了与net.sf.json.JSONObject类库相关的Java档案(JAR)文件的压缩包。这个类库是开源项目JSON.org的一部分,用于在Java应用程序中处理JSON(JavaScript ...
在标题中提到的"JSON(net.sf.json.JSONArray)需要的jar包",是指为了在Java项目中使用`net.sf.json.JSONArray`以及相关的JSON类,你需要引入特定的jar包。`net.sf.json.JSONArray`是开源项目Apache licensed Json-...
6. **错误处理与兼容性**:`net.sf.json`库也考虑到了错误处理,当JSON数据不合法时,会抛出相应的异常。同时,它可能已经对不同的JSON标准和规范进行了兼容性处理,确保在不同环境下都能正常工作。 总的来说,`...
在Java开发中,`net.sf.json.JSONObject` 是一个常用的JSON对象模型类,它来自于开源项目json-lib。这个库提供了一种方便的方式来处理JSON(JavaScript Object Notation)数据格式,允许我们在Java应用程序中创建、...
标题中的"net.sf.jadclipse_3.3.0.jar"是一个特定版本的JadClipse插件,属于Java反编译工具。JadClipse是集成开发环境(IDE)MyEclipse的一个扩展,用于查看和理解Java字节码,这对于调试、学习或逆向工程代码非常...
在Java开发中,`net.sf.json.JSONObject`是一个广泛使用的JSON处理库,特别是在Maven仓库中无法直接找到的情况下,开发者可能需要手动引入这个依赖库。`net.sf.json`库提供了对JSON(JavaScript Object Notation)...
在实际开发中,`net.sf.json`通常与其他Java相关的技术结合使用,例如Spring MVC框架、Struts2或Hibernate等,通过JSON进行前后端数据交互,提高应用程序的响应速度和用户体验。 标签中的“son相关包”可能是一个...
`net.sf.json.JSONObject`是开源库Apache Commons Lang中的一个类,它提供了解决Java对象与JSON字符串之间转换的功能。这篇博客文章"net.sf.json.JSONObject实现Object对象与Json字符串的互转"深入探讨了如何使用`...
Json所需6个JAR包(net.sf.ezmorph.MorpherRegistry异常),在json使用中我们经常会遇到net.sf.ezmorph.MorpherRegistry异常,这些jar包就是为了解决这个问题
net.sf.json.JSONObject所需要的jar包 commons-beanutils-1.9.3.jar commons-collections-3.2.2 commons-lang-2.6 commons-logging-1.2 ezmorph-1.0.6 json-lib-2.4-jdk15
`net.sf.ezmorph.MorpherRegistry`异常通常是由于Ezmorph库没有正确导入或者版本不匹配导致的。Ezmorph是一个Java库,它提供了一种方便的方式来转换对象的类型,这在处理JSON时可能会用到,特别是在将JSON字符串转换...
net.sf.json jar包包含了一下:可以用来解析json,具体操作可以看小编的博客。 commons-lang.jar commons-beanutils.jar commons-collections.jar commons-logging.jar ezmorph.jar json-lib-2.2.2-jdk15.jar
`net.sf.json.JSONObject` 是一个广泛使用的开源JSON库,它为Java开发者提供了处理JSON对象的能力。这个库在很多项目中被用作与JSON数据交互的工具,尤其在那些不使用现代Java版本(如Java 8及以上)或者不依赖更...