2012-02-21 5 views
1

저는 데이터베이스에 데이터를 저장하기 위해 EntityManager를 사용하고 있습니다.EntityManager의 flush() 메서드는 언제 반환합니까?

public void save(X x){ 
    entityManager.persist(x); 
    entityManager.flush(); 
    triggerDataChange(); 
} 

데이터를 세척 후에 나는 새로 기록 된 데이터에 의존하는 외부 구성 요소에 메시지를 보낼 수 triggerDataChange() 메서드를 호출합니다.

질문 : 데이터가 데이터베이스에 성공적으로 기록 된 후 을 반환하는 플러시 메서드를 사용할 수 있습니까?

도움 주셔서 감사합니다.

+0

예, flushing은 DB의 변경 내용을 커밋합니다. (하지만 여전히 롤백 할 수 있습니다.) –

+0

BTW : 최대 절전 모드를 사용하는 경우 가능한 플러시 모드를 확인하십시오. http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/FlushMode.html –

+0

"DB에 변경 내용을 커밋한다고 말하면"DB에 변경 내용을 적용하지 않는다 "는 의미입니다. 귀하의 다른 응용 프로그램은 데이터베이스에서 커밋되지 않은 데이터를 읽어야합니다. 실제로 원하는 것은 데이터를 커밋 (즉 트랜잭션 완료) 한 다음 외부 시스템에 호출하는 것입니다. 그렇지 않으면 외부 시스템이 롤백 할 수있는 데이터를 기반으로 결정을 내릴 수 있습니다. – davidfrancis

답변

1

거래가 동일하므로 거래가 롤백 되더라도 롤백됩니다. Flush는 여전히 롤백 될 수 있으므로 트랜잭션을 커밋하지 않습니다. 그래서 당신의 구현에서 당신이하고있는 것은 괜찮습니다.

관련 문제