2017-11-24 9 views
1

DB操作用のDAOクラス/メソッドのSpringの@Transactional注釈を使用したIam。 PostgreSQLSpring @Transactionalはトランザクションのオープンを防ぎます

SessionFactoryで構成 Hibernate ORMが構成で@Beanで作成し、DAOクラスで@Autowiredを用いretreivedれます。

@Autowired 
SessionFactory sessionFactory; 

@Transactional(value = "myTransactionManager") 
public int getTotalClientsInDatabase() { 
    Query countTotalClientsQuery = sessionFactory.getCurrentSession() 
      .getNamedQuery(DeviceInfo.COUNT_TOTAL_CLIENTS); 
    return Integer.parseInt(countTotalClientsQuery.uniqueResult().toString()); 
} 

getTotalClientsInDatabaseが呼び出されるたびに、常にトランザクションが開かれます。

SELECT(DDL)クエリのように、トランザクションのオープンを防止したいと考えています。

@Transactionalが削除された場合Exceptionがスローされ、sessionFactoryが同期されていません。

readOnly=trueが追加された場合のパフォーマンスはdippedです。 @Transactional(value = "myTransactionManager", readOnly=true)

を開ける方法はありませんか?Transaction ??

答えて

1

グッドプラクティスはSUPPORTSの伝播レベルでトランザクションをマークするために、あなたのケースで次のようになります。

どれ が存在しない場合は非トランザクション実行し、現在のトランザクションをサポートしています。

したがって、親メソッドがトランザクションコンテキスト内にない場合、このメソッドも使用できません。

@Transactional(propagation=Propagation.SUPPORTS, value = "myTransactionManager") 
関連する問題