2011-04-06 2 views
2

... 또는 관련 트랜잭션이 커밋 될 때까지 대기합니까?session.save()는 즉시 삽입합니까?

이 같은 루프에 HQL 쿼리를 사용하고 있습니다 :

tx.begin() 
for(...) 
{ 
    session.getNamedQuery(...).list() 
    ... 
    session.save(new MyEntity()) 
} 
tx.commit() 

명명 된 쿼리가 저장 호출로 추가 된 개체를 볼 수 있어야합니다. 그런 식으로 작동할까요? 그 다음 DB에 SQL을 보내

session.flush() 

를 호출하지 않는 경우

+1

알아내는 가장 쉬운 방법은 작동하는 경우 시도하는 것입니다. – biziclop

답변

4

세션의 비움 모드에 따라 달라집니다. 당신은 수동으로 session.flush()

플러시 모드는 여러 가지 방법으로 설정할 수 있습니다

로 세척 할 수 있습니다 - session.setFlushMode(..), entityManager.setFlushMode(..), 또는 XML 구성 (org.hibernate.FlushMode)를 통해.

기본값은 AUTO입니다 :

세션은 때때로 쿼리가 오래된 상태를 반환하지 않는다는 것을 보장하기 위해 쿼리 실행 전에 플러시됩니다. 이것은 기본 비우기 모드입니다.

1

는 그것을 시도. 관계없이 호출 할 때까지는 커밋되지 않습니다.

tx.commit() 
관련 문제