hereと記載されている「JBossクイックスタート」チュートリアルを使用しています。 JPAを含む分散トランザクションをスタンドアロンアプリケーションで使用する方法を示します。スタンドアロンJTA 1.2および休止状態:JPAはロールバックされませんか?
私はコードをダウンロードしました。正常に動作し、すべてのテストケースが緑色です。
それは、次のテストケースが含まれますと
@Test
public void testJpa() throws Exception {
transactionManager.begin();
System.out.println(testEntityRepository.save(new TestEntity("test1")));
System.out.println(testEntityRepository.save(new TestEntity("test2")));
System.out.println(testEntityRepository.save(new TestEntity("test3")));
transactionManager.rollback();
org.junit.Assert.assertEquals(0, testEntityRepository.findAll().size());
}
:私はこのように、トランザクションを開始し、アサートする前にそれをロールバックすることによって、これをより面白くしたかった
@Test
public void testJpa() throws Exception {
System.out.println(testEntityRepository.save(new TestEntity("test1")));
System.out.println(testEntityRepository.save(new TestEntity("test2")));
System.out.println(testEntityRepository.save(new TestEntity("test3")));
org.junit.Assert.assertEquals(3, testEntityRepository.findAll().size());
}
をrollback()
私はfindAll().size()
が0
を返すと期待します。しかし、それは3
を返し続けます。私は行方不明のものがありますか? JPAの状態をロールバックする機能はチュートリアルの主な目的の1つと思われますか?
TestEntityRepository
のオリジナルコード:
public class TestEntityRepository {
@Inject
EntityManager entityManager;
@Transactional
public List<TestEntity> findAll() {
assert entityManager != null;
return (List<TestEntity>) this.entityManager.createQuery("select te from TestEntity te").getResultList();
}
@Transactional
public Long save(TestEntity testEntity) {
assert entityManager != null;
if (testEntity.isTransient()) {
entityManager.persist(testEntity);
entityManager.flush();
} else {
entityManager.merge(testEntity);
entityManager.flush();
}
return testEntity.getId();
}
}
他のコードがhereを見出すことができます。
永続化とマージ後にフラッシュする特別な理由はありますか? – Jaumzera
これを試してください:TestEntityRepository内のメソッドにtestEntityRepository.save呼び出しを移動し、testJpaから呼び出します。 – Jaumzera
@Jaumzeraあなたの提案に感謝します。あなたが示唆したように試みたが、同じ効果。私は、JPAトランザクションが何らかの形でJTAトランザクションに正しくリンクされていないと思います。 @Transactional(TxType.MANDATORY)で '@Transactional'を置き換え、テストケースにentityManager.begin()を残しておけば、トランザクションが必要であるという例外が発生します。 – geert3