hibernate4不支持getCurrentSession()吗

plugin 发布于 2015/02/03 17:12
阅读 7K+
收藏 1

其他都配置正常,但是运行报

org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread

按照网上说的,能加的都加了。还是没用。

有人说,hibernate4不支持getCurrentSession,对不对?

我用openSession就没有问题。那么这样做spring会自动管理session吗??

加载中
0
plugin
plugin
有人吗
0
淡看江湖
淡看江湖
自己openSession就不属于spring管理了
plugin
plugin
是啊。。那我怎么管理呢?每查一次就手动关一次?这个很不方便啊我觉得,比如service里的一个方法,里面需要调用两个dao方法。这两个dao方法都不是一个session
0
alexgaoyh
alexgaoyh

因为没看到你的配置,所以不清楚具体代码实现,可参考  http://git.oschina.net/alexgaoyh/alexgaoyh

是使用hibernate4的···

plugin
plugin
回复 @alexgaoyh : 呀呀呀。太粗心了。谢谢你
alexgaoyh
alexgaoyh
回复 @plugin : HibernateTemplate类中public Serializable save(final Object entity) throws DataAccessException BaseDao中void save(E entity) throws Exception 看入参和函数返回值,肯定不一样的·
alexgaoyh
alexgaoyh
回复 @plugin : implements BaseDao<E> 是为了封装自己的CRUD方法,extends HibernateTemplate 是为了将sessionFactory 注入进去, BaseDaoImpl 里面的save()方法实际调用的还是this.getSessionFactory().getCurrentSession().save(entity) 这个。
plugin
plugin
回复 @alexgaoyh : 晕死了找到原因了。那个配置aop的要写在springmvc的配置文件中,而我一直写在spring的配置文件中。导致事务一直没打开。谢谢你啦。但是还要问一句,为什么接口里和父类里有有save方法,不冲突
alexgaoyh
alexgaoyh
回复 @plugin : 把所有配置文件贴出来吧···这样是看不出问题的·
下一页
0
原来如此
原来如此
spring管理Connection,可以从spring中获取它
0
plugin
plugin
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">

	<context:component-scan base-package="com.review">
	
	</context:component-scan>

	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
		<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/review"></property>
		<property name="user" value="root"></property>
		<property name="password" value="90184340"></property>
		<property name="initialPoolSize" value="5"></property>
		<property name="minPoolSize" value="5"></property>
		<property name="maxPoolSize" value="40"></property>
	</bean>
	
	<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
		<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
		<property name="dataSource" ref="dataSource"></property>
		
	</bean>
	
	<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	
	<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

以上是配置文件


0
aoyanfeng
aoyanfeng
你的AOP呢?
spring都不知道你要注到哪里去。
0
JeffreyLin
JeffreyLin
你用哪个版本的 spring?
我用spring 4.1.2 有这两个类:
org.springframework.orm.hibernate4.support.OpenSessionInterceptor
org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
plugin
plugin
这两个拦截器应该是为了把session的声明周期延长到视图层把
0
康州牧码人
康州牧码人

在service接口层添加事务注解 @Transactional

0
康州牧码人
康州牧码人

引用来自“梦幻de风”的评论

在service接口层添加事务注解 @Transactional

个人觉得是因为你调用该接口时,没有启动事务,既然你是交给了spring管理,那就由spring来开启事务吧
0
康州牧码人
康州牧码人

引用来自“梦幻de风”的评论

在service接口层添加事务注解 @Transactional

引用来自“梦幻de风”的评论

个人觉得是因为你调用该接口时,没有启动事务,既然你是交给了spring管理,那就由spring来开启事务吧
<!-- 配置hibernate属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>



plugin
plugin
我觉得吧。这个current_class ....的不用配,好像默认的就是这个。我那个问题已经解决了。是一个一个配置,我3的时候是写在applicationContext.xml里的。4竟然要写在springmvc.xml里。郁闷死了。忙活了好几个小时才找到原因
康州牧码人
康州牧码人
配一下 ,这句话 <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
返回顶部
顶部