日期:2014-05-17  浏览次数:20589 次

求大神帮助,spring + hibernate4事务配置不起作用
spring_XXX.xml

<bean id="txManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<tx:annotation-driven transaction-manager="txManager" />

<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true" propagation="REQUIRED" /><!--之前是NOT_SUPPORT -->
<tx:method name="query*" propagation="REQUIRED" read-only="true"/>   
<tx:method name="count*" propagation="REQUIRED" read-only="true" />
<tx:method name="find*" propagation="REQUIRED" read-only="true" />
<tx:method name="list*" propagation="REQUIRED" read-only="true" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>

<aop:config proxy-target-class="true"> 
<aop:pointcut id="allManagerMethod" expression="execution(* com.core.mvc.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod" />
</aop:config>

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


java类
	
public List<Teacher> getTeacher() {
// TODO Auto-generated method stub
sessionFactory.getCurrentSession().getTransaction().begin();
System.out.println("???:" + sessionFactory.getCurrentSession().getTransaction().isActive());
String sql = "select new Teacher(t.id,t.name) from Teacher t";
Query query= sessionFactory.getCurrentSession().createQuery(sql);
query.setFirstResult(0);
query.setMaxResults(10);
List<Teacher> list = query.list();
for(Teacher j:list){
System.out.println(j.getName() + "," + j.getId());
}
sessionFactory.getCurrentSession().getTransaction().commit();
System.out.println("????????:" + sessionFactory.getCurrentSession().getTransaction().isActive());
return list;
}


原本hibernate3是没问题的,现在换了hibernate4,发现session相关方法createQuery,get等,都必须在开启事物才能工作,否则弹出XXX is not valid without active transaction(具体在hibernate源码代理类有些),但是现在hibernate4的事务配置不生效,导致要人手sessionFactory.getCurrentSession().getTransaction().begin()才能生效.

请各位大神看看,AOP事务在hibernate4上面的配置为什么不生效?

------解决方案--------------------
spring已经不给hibernate4提供getHibernateTemplate()方法做事务处理了