プロジェクトをSpring3.0+hibernate3.6.xからS3.1+H4.1に移行しています
私の新しいコードは次のとおりです
<context:component-scan base-package="x.y.z">
</context:component-scan>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.x</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
<value>x.y.z.entities.Student</value>
</list>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<aop:config>
<aop:pointcut id="daoServicePoint"
expression="execution(* x.y.z.StudentDao.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="daoServicePoint"/>
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
getStudentメソッドマーカーをSUPPORTSとして実行し、読み取り専用で取得している場合
org.hibernate.HibernateException: No Session found for current thread
at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1024)
以前はSpring3.0とHibernate3.6.xで問題ありませんでしたが、現在は変更されています。Springフォーラムから、使用する必要がある場合はマークトランザクションが必要であると理解しました。sessionFactory.getCurrentSession();
コードで最大の同時速度を得るために、より低いレベルの手法を使用しました。いくつかのget/save / update /クエリを必要とする操作を実行するとき、私はそれを次のように行いました:
- としてマークされたメソッドと呼ばれ
SUPPORTS
ます。 SUPPORTS
最初のメソッド内としてもマークされているすべてのgetクエリを実行しました。- 次に、同じメソッド内としてマークされたクエリを開始しました
REQUIRED
。これは、ロール可能なバックトランザクションが開始されるポイントです。
この手法を使用するとパフォーマンスが向上しましたが、すべてのメソッドをREQUIREDとしてマークすると破棄されます。
どうすればそれを回避できますか?