2011-06-10 3 views
0

을 분리, 내 코드는 간다 :최대 절전 모드 좋은 방법 나는 최대 절전 모드 쿼리를 생성 한 후 객체

@SuppressWarnings("unchecked") 
List<SendCommands> list = query.list(); 
session.evict(list); 
if(list.isEmpty()) 
    return null; 
SendCommands dst = list.get(0); 
return dst; 

이 예를 들어, "좋은"연습 무엇입니까 : 분리

1) (퇴거)

@SuppressWarnings("unchecked") 
List<SendCommands> list = query.list(); 
if (list.isEmpty()) 
    return null; 
SendCommands dst = list.get(0); 
session.evict(dst); 
return dst; 
,174 : 다음 먼저 세트의 객체 또는

2) (분리 퇴거) 세트의 첫 번째 객체를 반환 전체 결과 집합

+0

정확히 달성하기를 원하십니까? 왜 물체를 분리해야합니까? – axtavt

+0

개체를 분리하여 다른 레이어로 전달해야합니다. 문서에 따르면 트랜잭션의 끝에서 개체가 손실 될 수 있습니다. 왜 개체를 분리하려고합니까? – iliaden

답변

2

개체를 분리 할 필요가 없습니다. Hibernate 엔티티는 POJO이며, 트랜잭션이 끝날 때 잃지 않습니다. 세션이 닫히면 자동으로 분리됩니다. 그러나 엔티티가 연결되어있는 동안 데이터가 지연로드 된 것으로 표시되고 가져 오지 않은 경우에는 해당 데이터를 계속 사용하고 액세스 할 수 있습니다.

+0

감사합니다. 게으른 로딩 필드가 있고 세션이 닫히면 어떻게 될지 알려주실 수 있습니까? 이 필드가 널 포인터가 될 것입니까? 아니면 Hibernate가 예외를 던지겠습니까? 또한 : 개체를 분리하지 않았 으면 반환하고 다른 곳 (동일한 세션, 다른 스레드)에서 업데이트하십시오. 반환 값이 바뀔까요? – iliaden

+0

LazyInitializationException이 발생합니다. 다른 스레드에서 동일한 세션을 사용해서는 안되기 때문에 두 번째 questio는 실제로 의미가 없습니다. 세션은 단일 스레드입니다. Hibernate를 사용할 때이 기본적인, 그러나 매우 중요한 것들. 당신은 분명히 절전 참조 문서를 재사용해야한다. http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single –