2011-08-08 4 views
6

나는 시나리오 만난 : 최대 절전 모드로 목표 테이블에데이터베이스 트리거 및 최대 절전 모드는

  1. save 또는 update 일부 데이터를
  2. insert 또는 update 이전에 실행 될 대상 테이블에 트리거가
  3. Hibernate에 의해 아웃이 기록 대상 테이블
  4. select의 동작

그러나 트리거에 의해 수정 된 필드는 실제로 가져 오지 않습니다. 이것은 Hibernate (flush()가 이미 호출 된 트랜잭션) 또는 Hibernate 캐시와 관련이 있습니까? 감사.

답변

4

이것은 첫 번째 (세션) 캐시 또는 두 번째 (예 : ehcache) 캐시로 인해 발생할 수 있습니다. 엔티티를 다시 읽으려면 session.refresh()를 호출해야합니다.

hibernate docs에서 (단면의 아래쪽)

그것은 다시로드 객체 리프레시() 메소드를 사용하는 한번에 모든 컬렉션 할 수있다. 데이터베이스 트리거를 사용하여 개체의 일부 속성을 초기화 할 때 유용합니다.

sess.save(cat); 
sess.flush(); //force the SQL INSERT 
sess.refresh(cat); //re-read the state (after the trigger executes) 
9

당신은 generated values으로 속성을 매핑 할 수 있습니다. 이 값은 항상 데이터베이스에서 가져 오므로 저장할 수 없습니다. Hibernate는 데이터베이스를 삽입하거나 업데이트 한 후 후속 쿼리에서이 값을 자동으로로드한다.

관련 문제