createQuery is not valid without active transaction

hibernate事务支持

报createQuery is not valid without active transaction错误说明你的方法没有事务支持。

解决办法1:在hibernate或spring配置文件加入

<prop key="hibernate.current_session_context_class">thread</prop>

这句。然后在你调用的方法上显示开启事务:

sessionFactory.getCurrentSession().beginTransaction();

执行自己的操作,然后显示提交

sessionFactory.getCurrentSession().getTransaction().commit();

这样有一个麻烦事就是每次都要显示处理事务,很麻烦,而且相同代码重复出现,明显冗余。

 

 

解决办法2:

使用aop,此时依然用sessionFactory.getCurrentSession()做持久化操作。这时要去掉下面一句:

<prop key="hibernate.current_session_context_class">thread</prop>

但加入如下配置:

 <!-- 这里要配置你的bean 和sessionFactory-->
 <bean id="userService" class="**" 
            p:sessionFactory-ref="sessionFactory"/>
   
    <!-- 配置Hibernate的局部事务管理器,使用HibernateTransactionManager类 
        并注入SessionFactory的引用 -->
    <bean id="transactionManager" class=
        "org.springframework.orm.hibernate4.HibernateTransactionManager"
        p:sessionFactory-ref="sessionFactory"/>    
    <!-- 配置事务增强处理Bean,指定事务管理器 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <!-- 用于配置详细的事务语义 -->
        <tx:attributes>
            <!-- 方法使用默认的事务设置 -->
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>
    <aop:config>
        <!-- 配置一个切入点,这个Bean的所有方法的执行 -->
        <aop:pointcut id="myPointcut"
            expression="bean(userService)"/>
        <!-- 指定切入点应用txAdvice事务增强处理 -->
        <aop:advisor advice-ref="txAdvice" 
            pointcut-ref="myPointcut"/>
    </aop:config>    
    <aop:aspectj-autoproxy proxy-target-class="true"/>

 

转载于:https://www.cnblogs.com/chenhtblog/p/8157289.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值