- 浏览: 654825 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (170)
- Android (10)
- Java (35)
- PHP (3)
- Linux (3)
- Powerdesigner (2)
- dedcms (1)
- nginx (1)
- Flex (9)
- REST (2)
- Google App Engine (1)
- mysql (6)
- JAVA开源项目 (1)
- Eclipse (18)
- Eclipse Orion (1)
- Dojo (2)
- UML (1)
- Eclipse GEF EMF (4)
- Eclipse 插件开发 (6)
- OSGI (2)
- DeDeCMS (1)
- Maqetta (2)
- JavaScript (1)
- nginx php (1)
- Dojo V1.7 (2)
- Spring3 (4)
- Hibernate3 (4)
- MongoDB (3)
- Scala (2)
- DSL (1)
- Python (3)
- Maven (1)
- Tomcat (3)
- XMPP (2)
- Apache (4)
- NodeJS (1)
- SQLSERVER (2)
- HTML5 (1)
- Nexus (1)
- web服务器 (2)
- Jetty (2)
- weixin (1)
- ngrok (1)
- 网络与信息安全 (1)
最新评论
-
wangyudong:
配置有点晕,开源社区上找了一个开源的Holer,只需要设置Ac ...
用ngrok实现外网访问本地WEB项目的方法 -
lolo968:
你收集的资料没有链接
基于OSGI的框架开发小结(转) -
smartdog:
使用的maven的版本很老的,而且写的不是很清楚,建议可以参考 ...
Maven多项目依赖配置 -
Tom.X:
OSGi联盟官网:http://osgia.com
基于OSGI的框架开发小结(转) -
Miller003:
你好,我在本地测试时,删除catalina.jar和tomca ...
基于Tomcat7的HTML5 WebSocket 应用示例
在使用Spring+Hibernate的框架时,在applicationContext.xml中配置了如下的代码片段:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource"/>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
<prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
<!-- 绑定会话到当前线程 -->
<prop key="hibernate.current_session_context_class">${hibernate.current_session_context_class}</prop>
</props>
</property>
<property name="mappingLocations">
<list>
<value>classpath:/com/changetech/model/*.hbm.xml</value>
</list>
</property>
</bean>
在调用Dao(是使用声明式事务管理@Transactional注解来进行配置的)层时,
@Transactional
public void saveOrUpdate(T t)
{
getSession().saveOrUpdate(t);
}
出现以下的错误:
org.hibernate.HibernateException: saveOrUpdate is not valid without active transaction
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:338)
at $Proxy23.saveOrUpdate(Unknown Source)
at com.changetech.dao.impl.BaseDao.saveOrUpdate(BaseDao.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy15.saveOrUpdate(Unknown Source)
at com.changetech.service.impl.BaseService.saveOrUpdate(BaseService.java:22)
at com.changetech.client.MultiThreadServiceTest.sampleTest(MultiThreadServiceTest.java:51)
at com.changetech.client.MultiThreadServiceTest$ThreadB.runTest(MultiThreadServiceTest.java:66)
at net.sourceforge.groboutils.junit.v1.TestRunnable.run(TestRunnable.java:154)
at java.lang.Thread.run(Thread.java:619)
经过在网上查找原因,说是Hibernate源码里做了一些修改,说是,hibernate里的所有操作(包括get\load\delete\list\saveOrUpdate等)都必须在transcation.isActive()条件下才可以执行,否则就会出现上述的错误。
<prop key="hibernate.current_session_context_class">${hibernate.current_session_context_class}</prop>
如果把这句话去掉之后(Hibernate就开始利用Spring的事务管理),此错误就消失,目前还不知道是为什么。
但是对于spring如何默认打开Transaction还不是很清楚。
外部连接:
If you use spring 2.5 as a drop in replacement @Transactional isn't working any more.
They HibernateSession you get through a currentSession() has no active transaction and result in the following stack trace
Exception in thread "main" org.hibernate.HibernateException: createSQLQuery is not valid without active transaction
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:297)
at $Proxy7.createSQLQuery(Unknown Source)
at ag.pinguin.myservice.impl.MyService.doSomething(MyService.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:301)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy5.doSomething(Unknown Source)
at test.SpringTestMain.main(SpringTestMain.java:16)
With spring 2.0.7 the exact same code/config works fine
As of Spring 2.5, Spring uses a custom CurrentSessionContext implementation plugged into Hibernate (requires Hibernate 3.1+). Previously, Spring created a special SessionFactory proxy (which also worked with Hibernate 3.0.)
Note that your hibernate.cfg.xml specifies
<property name="current_session_context_class">thread</property>
This overrides the default CurrentSessionContext (Spring's) with the standard Hibernate thread-local context. This leads to the failure that you see. Spring 2.5 simply respects your configuration there – in this case, wrong configuration that Spring 2.0 simply ignored. In any case: You shouldn't have specified that even when using Spring 2.0!
发表评论
-
JVM系列三:JVM参数设置、分析(转)
2014-09-28 15:04 1078不管是YGC还是Full GC,GC过程中都会对导致程序运 ... -
Java中static、final用法小结 (转)
2012-08-26 10:51 1972一、final 1.final变量: ... -
java位操作符总结(转)
2012-08-17 11:16 1278以下是java位操作符的小总结,具体如下:二进制负数以它 ... -
Servlet生命周期与工作原理(转)
2012-08-14 16:57 1047Servlet生命周期与工作原理 Servle ... -
java堆与栈 java String分配内存空间(详解)转
2012-08-10 15:44 1284栈内存 堆内存 ... -
java类继承总结一 父类类型与子类类型之间的转化问题(转)
2012-08-06 21:13 8677java类继承总结一 父类类型与子类类型之间的转化问 ... -
java堆和栈小结(转)
2012-08-05 21:45 1053(1)JAVA中基本数据类型直 ... -
Java常见异常(Runtime Exception )小结--转
2012-08-02 21:04 1336Java常见异常(Runtime Exception ) ... -
org.hibernate.MappingException: Unknown entity: GMDomain
2012-06-26 22:05 1184在使用Hibernate3全注解映射数据库,在进行数据库的插入 ... -
java.lang.NoClassDefFoundError: org.objectweb.asm.Type
2012-06-03 15:27 2468在使用spring3的aop时,出现如下的错误: ja ... -
Bean named '*' must be of type [*], but was actually of type [$Proxy16]
2012-06-03 14:14 28332在用junit测试dao接口时,出现以下的错误 Caused ... -
spring BeanCreationException confusion about mapping
2012-05-31 20:08 1372在进行spring3+rest配置时,出现了以下的错误: C ... -
如何获取新浪微博的登录参数
2012-05-23 20:32 77151、用Chrome的开发者工具或者Firefox的Firebu ... -
Java 程序中使用相对和绝对路径读取文件
2012-05-21 14:24 9150在Java中用File对象来创建文件时,绝对路径一般是不会出现 ... -
线程安全与线程不安全
2012-04-26 16:43 1217线程安全是针对多线程来讲的,如果所使用的公用变量在多线程 ... -
StringBuilder、StringBuffer和String的关系
2012-04-26 16:33 10051. String 类 S ... -
插件开发中如何正确使用第三方jar包
2012-04-21 20:48 2469在进行eclipse插件开发过程中,除了引用Eclipse本身 ... -
Errors running builder 'JavaScript Validator' on project '......'.
2012-04-21 20:36 31322在编译java工程时,如果出现 “Errors occu ... -
The method *** of type *** must override a superclass method
2012-04-21 20:34 1350如果在实现接口时,出现了“The metho *** o ... -
Java 1.6动态编译器 null问题
2012-03-16 10:45 15591、在java程序中用JavaCompiler compile ...
相关推荐
### Hibernate merge、update与saveOrUpdate方法的区别 在Hibernate框架中,`merge`、`update`与`saveOrUpdate`这三个方法都是用于更新或保存实体对象到数据库中的,但它们之间存在着重要的区别,这些区别主要体现...
在Java的持久化框架Hibernate中,管理对象与数据库之间的交互是通过一系列的方法完成的,其中包括`save()`, `saveOrUpdate()`, `persist()`, `merge()`, 和 `update()`。这些方法各有其特点和适用场景,理解它们的...
`saveOrUpdate`是Hibernate提供的一种便捷方法,用于处理对象的保存或更新操作。在深入讲解`saveOrUpdate`之前,我们先理解一下Hibernate的基本概念。 在Hibernate中,实体类(Entity Class)代表数据库中的表,...
在Java的持久化框架Hibernate中,实体对象的状态管理和`saveOrUpdate`方法是核心概念,对于理解和有效使用Hibernate至关重要。在本教程中,我们将深入探讨实体对象的三种状态以及`saveOrUpdate`方法的工作原理。 ...
在使用HibernateTemplate的saveOrUpdate方法时,如果遇到类似`\xE7\x84`这样的十六进制字符串,通常这是由于字符编码不匹配导致的汉字乱码问题。这个问题主要涉及到数据库的字符集设置、应用程序的编码配置以及数据...
### Hibernate中的`save()`与`saveOrUpdate()`方法详解 #### 一、概述 在Java持久化框架Hibernate中,`save()`与`saveOrUpdate()`是非常重要的两个方法,它们用于处理对象的持久化操作。理解这两个方法的工作原理...
博文链接:https://log-cd.iteye.com/blog/205166
// 其他辅助方法,如readCellData、isValid、createEntity等 } ``` 以上代码仅作为简化示例,实际应用中需要根据具体需求进行调整和优化。在进行Excel导入导出优化时,应结合项目实际,选择合适的策略和技术,以...
使用Hibernate进行数据插入,主要通过Session对象的save()或saveOrUpdate()方法实现。例如: ```java SessionFactory factory = Configuration().configure().buildSessionFactory(); Session session = factory....
1. 增加(Insert):通过Session的`save()`或`saveOrUpdate()`方法将Java对象持久化到数据库。 ```java Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); ...
在Hibernate中,增加数据通常是通过`Session`对象的`save()`或`saveOrUpdate()`方法完成的。首先,你需要创建一个Java实体类,这个类代表数据库中的表,并使用注解或XML配置来映射字段。例如,假设有一个`User`类: ...
在Hibernate中,增加数据主要通过Session对象的save()或saveOrUpdate()方法来实现。首先,我们需要创建一个实体类,该类对应数据库中的表,并用注解@Entity定义。然后,为实体类的属性添加对应的注解,如@Id用于标识...
session.saveOrUpdate(newOrder); transaction.commit(); session.close(); ``` 5. **懒加载与级联操作:** 默认情况下,Hibernate使用懒加载策略,只有在访问集合属性时才会加载其内容,以提高性能。同时,...
创建一个新的对象实例,设置其属性,然后通过会话的 `Save()` 或 `SaveOrUpdate()` 方法将其保存到数据库。 ```csharp using (var session = sessionFactory.OpenSession()) { using (var transaction = session....
Transaction transaction = session.beginTransaction(); ``` - **执行查询** 使用`createQuery`方法创建查询,然后调用`list`方法执行查询并返回结果列表。 - **普通查询** ```java String hql = "from ...
Transaction transaction = session.beginTransaction(); User user = new User(); user.setUsername("testUser"); session.save(user); transaction.commit(); session.close(); ``` 这里,`SessionFactory`负责...
使用Hibernate进行对象创建时,首先需要实例化一个Java实体对象,设置其属性,然后调用`Session`的`save()`或`saveOrUpdate()`方法将其持久化到数据库。例如: ```java Session session = sessionFactory....