1
트랜잭션에서 실패한 경우 커밋되지 않은 데이터를 업데이트하고 트랜잭션을 롤백하는 대신 커밋 할 수 있습니까?Hibernate를 사용하여 커밋되지 않은 데이터 업데이트
트랜잭션에서 실패한 경우 커밋되지 않은 데이터를 업데이트하고 트랜잭션을 롤백하는 대신 커밋 할 수 있습니까?Hibernate를 사용하여 커밋되지 않은 데이터 업데이트
아니요. 그것은 불가능합니다. 아주 좋은 이유가 있습니다.
JPA와 Hibernate Persistence Context를 플러시하는 동안 예외가 발생하면 동기화 된 엔티티 상태 전환의 수와 플러시되지 않은 상태 전환이 명확하지 않습니다.
JPA 작업 단위 (Persistence Context)는 원자 번호뿐만 아니라 ACID transaction should be atomic과 같습니다.
이 동작을 중단하려는 것은 데이터 액세스 디자인 냄새이며이 질문에 이르게 한 원래의 문제에 대한 더 나은 해결책이 있음을 알려줍니다.
트랜잭션 관리자가 트랜잭션을 롤백하고 감사 추적을 위해 다른 테이블에 레코드를 삽입하는 것이 더 좋습니까? –
글쎄, 롤백중인 트랜잭션은 데이터베이스 리두 로그에 항목이 없으므로 감사 로그가 존재하지 않는 데이터베이스 변경을 표시해서는 안된다는 것을 의미합니다. 그러나 Event Sourcing을 사용해야하는 경우 성공 또는 실패 여부와 상관없이 모든 명령을 기록 할 수 있습니다. 이를 위해서는 JPA와 Hibernate로 트랜잭션을 열기 전에 별도의 트랜잭션을 사용해야한다. –
propagation에 대해 jta에 상응하는 것이 있습니까? requires_new 또는 프로그래밍 방식으로 수행 할 수있는 방법은 무엇입니까? –