2017-10-19 1 views
0

커밋을 통해 현재 트랜잭션을 종료하지 않고 현재 트랜잭션에 저장된 모든 entites를 데이터베이스로 플러시하고 싶습니다.JPA EntityTransaction flush

이렇게하기 전에 거래가 활성 상태인지 확인해야합니까?

if (this.entityTransaction.isActive()) 
    { 
     this.entityManager.flush(); 
    } 

메소드의 javadoc에 따르면 당신에게

+0

알 수없는 이유로 트랜잭션에 참여하지 않고 변경 내용을 잃어 버리면 어쨌든 예외를 throw해서는 안됩니까? – Chris

+0

@ 크리스 선생님 ... 요점이 있어요. 그러나 "isActive"가 실제로 나타내는 것은 무엇입니까? 나는 그것이 "시스템에 남아있는 데이터가있다"고 생각했다. -> 데이터베이스로 플러시했다. –

+0

아니요, isActive는 트랜잭션이 시작되었음을 의미합니다. 그것은 영속성 단위에 무엇이 있는지 또는 변경이 이루어 졌는지에 관해 아무것도 말하지 않습니다. 플러시는 변경 사항이 있는지 확인하고 변경 사항 만 푸시하지만, 기다리지 않고 코드에서 낙관적 인 잠금 또는 제약 사항을 잡으려면 데이터베이스에 명령문을 강제해야하는 등 염두에두고있는 경우에만 호출해야합니다. 트랜잭션이 커밋 할 때까지 – Chris

답변

0

감사는 EclipseLink의 EntityManager의 클래스의 플러시 :

https://www.eclipse.org/eclipselink/api/2.6/javax/persistence/EntityManager.html#flush()

무효 플러시() 영속 컨텍스트를 동기화 기본 데이터베이스에. 예외 : TransactionRequiredException을 -이 어떤 트랜잭션이 없거나 엔티티 관리자는 현재의 트랜잭션 (transaction)에 PersistenceException에 가입되어 있지 않은 경우 경우 - 플러시가

실패 할 경우, 다른 방법을 확인해야처럼 그래서 그래 보이는 "TransactionRequiredException"유형의 예외가 발생할 수 있습니다.