0

Struts をフロントエンドとして使用し、Spring を IOC に使用し、休止状態 + c3p0 をデータソース プーリングとして使用しています。永続レイヤーにannotationsessionfactory Beanと@Transactionアノテーションを使用しています。これはすべて春豆を使用して管理されます。

ただし、永続層メソッドで @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>

セッションファクトリーはスプリングアノテーションファクトリーであり、トランザクションはこのように管理されます。

<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 サーバーを使用しています。私が考えているのは、私の取引が管理されていないということです。どんな例でも大歓迎です。

4

1 に答える 1

0

HibernateTemplate は非トランザクション データ アクセスを許可し (自動コミット モードの場合)、新しいセッションを作成し (allowCreate が true の場合)、HibernateCallback の実行後にセッションを閉じます。コミットしない場合、ほとんどの DBM はロールバックしますが、Oracle が (ユーザーのために) コミットします。

例外を取得するには、HibernateTemplate で allowCreate を false に設定する必要があります。

詳細: https://community.jboss.org/wiki/Non-transactionalDataAccessAndTheAuto-commitMode

于 2012-02-20T17:52:29.483 に答える