【问题标题】:Struts + Spring + Spring managed transaction + hibernateStruts + Spring + Spring 托管事务 + hibernate
【发布时间】:2012-02-18 19:00:19
【问题描述】:

我使用 Struts 作为前端,使用 Spring 作为 IOC,使用 hibernate + c3p0 作为数据源池。 我正在为我的持久层使用 annotationsessionfactory bean 和 @Transaction 注释。 所有这些都是使用 spring bean 管理的。

但如果我不在持久层方法上使用@transactional 注释,我的数据也会被保存。

示例:

public interface CollegeHibernate {
   CollegeWTO saveCollege(CollegeWTO collegeWTO);
}


public class CollegeHibernateImpl extends HibernateTemplate implements CollegeHibernate{
   public CollegeWTO saveCollege(CollegeWTO collegeWTO) {
      College college = CollegeHelper.CollegeWTO_to_Model(new College(), collegeWTO);
   }
}

豆是

<bean id="collegeHibernate" class="com.velos.p1b.persistence.college.impl.CollegeHibernateImpl">
   <property name="sessionFactory" ref="sessionFactory" />
</bean>

会话工厂是spring注解工厂和 事务是这样管理的。

<tx:annotation-driven transaction-manager="transactionManager" />
   <tx:advice id="txAdvice" transaction-manager="transactionManager">
      <tx:attributes>
         <tx:method name="save*"  read-only="true" rollback-for="java.lang.Throwable" />
      </tx:attributes>
   </tx:advice>

这种方法可以保存数据,但我根本不让它成为事务性的。据我说,它必须通过异常。我正在使用 oracle 11g 和 j-boss 4.2 服务器。我在想的是我的交易没有得到管理。任何例子都值得赞赏。

【问题讨论】:

    标签: hibernate spring struts2 transactional spring-transactions


    【解决方案1】:

    HibernateTemplate 允许非事务性数据访问(对于自动提交模式),它将创建一个新的 Session(如果 allowCreate 为 true)并在执行 HibernateCallback 后关闭它们。如果您不提交,大多数 DBM 将回滚,但 Oracle 会(为您)提交它们。

    要获得异常,您需要在 HibernateTemplate 中将 allowCreate 设置为 false。

    更多信息:https://community.jboss.org/wiki/Non-transactionalDataAccessAndTheAuto-commitMode

    【讨论】:

      猜你喜欢
      • 2012-10-16
      • 1970-01-01
      • 2023-03-28
      • 2011-06-13
      • 2018-03-28
      • 2017-03-26
      • 1970-01-01
      • 2012-05-06
      • 2017-07-30
      相关资源
      最近更新 更多