2011-09-03 1 views
1

봄이 없으면 최대 절전 모드 3.2.7을 사용하고있다. (묻지 않는다. 클라이언트는 스프링을 지원하지 않는다.) 나는 실행 중이다. 공개 세션보기 패턴의 구현과 관련한 문제입니다. save()를 호출하여 데이터베이스에 객체를 유지할 때 해당 객체에서 get()을 호출하여 데이터베이스의 외래 키로 표시되는 하위 객체의 세부 정보를로드합니다. 문제는 get()을 호출 할 때 자식 객체가로드되지 않는다는 것입니다. 새 트랜잭션에서 get() 메서드를 호출하면 모든 것이 예상대로로드됩니다.같은 트랜잭션 내에서 새로 생성 된 레코드에 save()를 실행 한 후 최대 절전 모드를 호출한다.

session.setFlushMode(FlushMode.MANUAL); 

contract.save(); 

//save the update to the database 
session.flush(); 

: 여기

HibernateUtil.openSession(); 

//get a transaction from JTA 
transaction = (UserTransaction)new InitialContext().lookup("java:comp/UserTransaction"); 

transaction.begin(); 

// Call the next filter (continue request processing) 
chain.doFilter(request, response); 

// Commit and cleanup 
log.finer("Committing the database transaction"); 
transaction.commit(); 

트랜잭션을 저장하는 서비스 계층의 저장 방법에서 미리보기입니다 :

는 거래를 세션을 열고 만들어 내 요청 필터에서 미리보기입니다 객체가 지속 된 후이 코드가있는 서비스에서 get() 메소드를 호출하는 struts 액션 클래스에 요청이 전달됩니다.

Session session = HibernateUtil.getSession(); 

session.setFlushMode(FlushMode.MANUAL); 

try { 

    contract = contract.get(); 

    ... 
} 

잘 작동하는 지속적인 계약을로드 할 때 get get() 메서드가 자체 트랜잭션에서 격리 될 때 제대로 작동한다는 것을 알기 때문에 동일한 get 액션 메서드가 호출됩니다. 그것은 작동하지 않는 유일한 시간은 동일한 트랜잭션 내에서 save() 바로 다음에 호출 될 때입니다.

답변

4

개체에서 Session.refresh()를 수행 해본 적이 있습니까?

+1

예, 새로 고침이 핵심이었습니다! 감사! – bittersweetryan

+0

기꺼이 도와 드리겠습니다. –

관련 문제