私はいくつかのアプリケーションでJpaTemplateを使用していくつかのボイラープレートコードを削除する可能性を調べ始めました。javaでJpaTemplateを使用してトランザクションを処理しますか?
私は今、この権利のようなものを持っている:
public class SomeDaoClass {
public SomeDaoClass(boolean handleTransactionsLocally) {
_handleTransactionsLocally = handleTransactionsLocally;
}
private void persist(final Object object) throws MyCustomException {
try {
if (_handleTransactionsLocally) {
EntityTransaction transaction = getEntityManager().getTransaction();
transaction.begin();
getEntityManager().persist(object);
transaction.commit();
}
else {
getEntityManager().persist(object);
getEntityManager().flush();
}
}
catch (Exception exception) {
throw new MyCustomException(exception);
}
}
}
ユニットテストから実行したとき、私はgetEntityManager()
をオーバーライドし、コンストラクタへの真の提供。これをサーバーにデプロイすると、注入されたエンティティマネージャがコンテナから返されます。
しかし、私が代わりにこれのような何かを行うことができるはずのように思える:
_jpaTemplate = new JpaTemplate(getEntityManager());
_jpaTemplate.persist(object);
にはどうすればjpaTemplate
がトランザクションを処理する方法をJavaコードで指定することができますか?私は@Transactional
とメソッドを注釈してみましたが、これは動作していないようです。 _jpaTemplate
にプロパティを設定する必要はありますか?これも可能ですか?
TIA
しかし、applicationContext.xmlなしでこれを行う方法はありますか?それが私がここで走っているものです。 – javamonkey79
にはapplicationContext.xmlがあります。また、宣言的なトランザクションを追加することもできません。 – Bozho
私はapplicationContext.xmlを持っていません - 私はJdbcTemplateクラスと同じ方法でJpaTemplateを使用しようとしています。 – javamonkey79