Spring + Hibernate + SQLite 스택에서 롤백에 실패한 트랜잭션에 문제가 있습니다. 두 개의 필드 (ID와 이름) 와 POJO - 여기 Spring + Hibernate + SQLite 트랜잭션 oddities
는 구성 http://pastebin.com/XbejGHft- 주석 응용 프로그램의 주요 클래스입니다
는 방법 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"); }
그것은 생성하고 일부 주문 엔티티를 계속 본다. 일부 생성물 사이에 데이터베이스에서 일부 데이터를 읽습니다. 결국 메소드 호출 중에 실패를 시뮬레이트하고 Spring to rollback 트랜잭션을 강제 실행하기 위해 RuntimeException을 던집니다.
실행 후 나는 마지막으로 생성 된 엔티티 (createOrder ("4"))와 다른 모든 (이름이 "1", "2"및 "3"인) completley 롤백이 데이터베이스를 열어 볼 수 있습니다. 데이터베이스 그러나 TestBean은 @Transactional로 표시되기 때문에 하나의 트랜잭션 메소드 testMethod()에서 생성 된 네 개의 엔티티를 모두 제거해야합니다.
SQLIte에서 모든 journal_mode를 시도했지만 롤백이 여전히 작동하지 않습니다.
아이디어가 있으십니까?
Hibernate는 ** ** em.persist() ** 호출마다 ** JdbcIsolationDelegate # delegateWork **를 호출하는 것 같습니다. 동시에 ** JdbcIsolationDelegate # delegateWork ** 호출 ** Connection # commit ** 메소드는 JPA/Hibernate 프레임 워크에서 모든 트랜잭션 상호 작용을 중단시킵니다. – Joltd