2011-09-07 5 views
0

私は休止状態になり、休止状態になり、休止状態のInterceptorの使用を学習しようとする初心者です。 私はと言うコミュニティのドキュメントを通り抜けた....Hibernate InterceptorとproxyTargetClassの使用方法

このインターセプタは、任意の方法 結果の場合には、その後、それを閉じると削除、 メソッド呼び出し前にスレッドに新しいHibernateのSessionをバインドします。あらかじめバインドされたセッションがある場合(例えば、 HibernateTransactionManager、またはその周囲の Hibernate-interceptedメソッド)、インターセプタは単に に参加します。

私はこれをいつ使用するのか、なぜこれを使うのか理解できません。

このようなタスクDaoをいつ作成するのですか?

<bean name="abstractDao" abstract="true"> 
     <property name="hibernateTemplate" ref="taskHibernateTemplate"/> 
    </bean> 
<bean id="taskHibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor"> 
     <property name="sessionFactory" ref="taskSessionFactory"/> 
    </bean> 

<bean id="taskDaoTarget" class="com.xyz.abc.backgroundtask.impl.TaskDao" parent="abstractDao"/> 

<bean id="taskDao" class="org.springframework.aop.framework.ProxyFactoryBean"> 
    <property name="proxyTargetClass" value="true"/> 
    <property name="interceptorNames"> 
     <list> 
      <value>taskHibernateInterceptor</value> 
      <value>taskDaoTarget</value> 
     </list> 
    </property> 
</bean> 

このタスクDaoをいつ作成するのですか?

<bean name="abstractDao" abstract="true"> 
     <property name="hibernateTemplate" ref="taskHibernateTemplate"/> 
    </bean> 

<bean id="taskDao" class="com.xyz.zbc.backgroundtask.impl.TaskDao" parent="abstractDao"/> 

答えて

2

Hibernate Interceptorを使用する必要がありますか?私は、代わりにSpringの(注釈ベースの)Declarative Transaction Managementを使用することをお勧めします。これは、サポートされている多くの基盤技術の共通抽象です。

基本的には、何をやっていることはJPAと休止状態の場合には、トランザクションマネージャーBeanの定義である:JPAなし

<bean id="transactionManager" 
    class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="myEmf"/> 
</bean> 

:どちらの場合も

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

、注釈ベースのトランザクションをアクティブにします。

<tx:annotation-driven /> 

また、インターフェイスを使用しない場合:

<tx:annotation-driven proxy-target-class="true" /> 

は今@Transactionalであなたのサービス層のメソッドやクラスに注釈を付け、あなたは自動的にあなたのサービスメソッドのスコープで作成されたセッションを取得します。

HibernateInterceptorとHibernateTemplateを使用しないことをお勧めしますが、どちらも最近のやり方ではありません。

読む:

そして物事は春に行われるために使用方法を確認します:

関連する問題