Spring + Hibernate + SQLiteスタックのロールバックに失敗したトランザクションに問題があります。二つのフィールド(idとname) とPOJO - ここSpring + Hibernate + SQLiteトランザクション奇妙
は私の例の主要なクラス
- 注釈アプリケーション構成http://pastebin.com/XbejGHft
- TestBeanhttp://pastebin.com/3BSFy34p
- 注文エンティティであり、
は、それはいくつかの注文エンティティを作成し、持続する)方法TestBean.testMethod(で
public void testMethod() { entityManager.persist(createOrder("1")); entityManager.persist(createOrder("2")); entityManager.persist(createOrder("3")); entityManager.createQuery("from Order").getResultList(); entityManager.persist(createOrder("4")); throw new RuntimeException("Managed"); }
を検索します。 いくつかの作成の間に、データベースからデータを読み込みます。 最後に、RuntimeExceptionをスローしてメソッドの呼び出し中にエラーをシミュレートし、Spring to rollbackトランザクションを強制します。
実行後、私はデータベースを開いて、最後に作成されたエンティティ(createOrder( "4"))とそれ以外のすべての(名前が "1"、 "2"、 "3"データベース。しかし、TestBeanは@Transactionalとしてマークされているので、あるトランザクションメソッドtestMethod()で作成された4つのエンティティをすべて削除する必要があります。
SQLIteですべてのjournal_modeを試しましたが、ロールバックはまだ機能しませんでした。
アイデア?
各** em.persist()**呼び出しでHibernateが** JdbcIsolationDelegate#delegateWork **を呼び出すようです。同時に、メソッド** JdbcIsolationDelegate#delegateWork **呼び出し** Connection#commit **は、JPA/Hibernateフレームワーク内のすべてのトランザクション相互作用を破棄します – Joltd