org.hibernate.LazyInitializationException는 : 게으르게 역할의 컬렉션을 초기화하지 못했습니다 : 어떤 세션 또는 세션 당신은 아주 작은 세부 사항을 제공어떻게 org.hibernate.LazyInitializationException을 해결할 수 있습니까?
0
A
답변
3
폐쇄되지 않았다 com.t4bt.gov.persistence.entities.Experts.institutaionList 당신의 질문 (코드?)이므로 게으른로드에 관한 일반화 된 대답이어야합니다. 앞으로 답을 원할 경우 실제 문제에 대한 구체적인 정보와 해결 방법에 대한 설명을 제공해주십시오.
LazyInitialization은 세션이 닫힌 후에 지연된 속성에 액세스하려고 할 때 발생합니다 (일반적으로 트랜잭션이 끝난 후). lazy 초기화가 작동하는 방식은 객체를 가져올 때 lazily 초기화 된 속성을 가져 오지 않지만 실제로 액세스하려고하면 Hibernate는 데이터베이스에 페치하기 위해 또 다른 쿼리를 수행합니다.
다음은 이러한 오류가 발생합니다 :
여기public class Something {
[...]
@OneToMany(fetch = FetchType.LAZY)
private List<SomethingElse> somethingElse;
public List<SomethingElse> getSomethingElse() {
return somethingElse;
}
}
public class SomethingDao {
@Inject
private EntityManager em;
@Transactional
public Something getById(final Integer id) {
return em.find(Something.class, id);
}
}
public class SomethingService {
@Inject
private SomethingDao dao;
public List<SomethingElse> getSomethingElseForSomething(final Integer somethingId) {
final Something something = dao.getById(somethingId);
return something.getSomethingElse() //Throws LazyInitializationException
}
}
트랜잭션 (따라서 세션)에만 DAO 클래스에 존재합니다. DAO 방법을 떠나면 세션이 종료됩니다. 따라서 서비스의 lazy-loaded 속성에 접근하려고하면 Hibernate가 세션을 검색하기 위해 세션에 접속하려고 시도 할 때 실패하게된다.
이를 방지하려면 여러 가지 가능성이 있습니다.
- 변경
@OneToMany(fetch = FetchType.EAGER)
속성에 뭔가 클래스의 주석이 더 이상로드 - 게으른, 그래서 더 이상 문제가되지 않습니다. - 서비스 방법에
@Transactional
을 추가하십시오. 그런 다음getSomethingElse()
에 대한 호출은 Something-object를 가져 오는 것과 동일한 트랜잭션에 있으며 세션은 여전히 유효합니다. - Dao- 메서드에서
getSomethingElse()
에 대한 호출을 추가하십시오. 그런 다음 Dao 클래스 (및 트랜잭션)를 떠나기 전에 속성을 초기화 (데이터베이스에서 가져 오기)하고 트랜잭션 외부에서 사용할 수 있습니다. 세션을 검색하기 위해 세션과 통신 할 필요가 없습니다.
관련 문제
- 1. 어떻게 해결할 수 있습니까?
- 2. 어떻게 해결할 수 있습니까?
- 3. 어떻게 해결할 수 있습니까?
- 4. NoMethodError를 어떻게 해결할 수 있습니까?
- 5. 오류를 어떻게 해결할 수 있습니까?
- 6. 어떻게 해결할 수 있습니까? python3.2
- 7. jsp에서 어떻게 해결할 수 있습니까?
- 8. NoClassDefFoundError는 어떻게 해결할 수 있습니까?
- 9. Spring CrudRepository가 org.hibernate.LazyInitializationException을 던졌습니다.
- 10. 어떻게 mvc 엔진으로 해결할 수없는 [ControllerAction] 속성을 해결할 수 있습니까?
- 11. 어떻게 mod_rewrite, htaccess에서이 문제를 해결할 수 있습니까?
- 12. 이 MDX 문제를 어떻게 해결할 수 있습니까?
- 13. IE6에서이 스타일 버그를 어떻게 해결할 수 있습니까?
- 14. Trigger.io 인증서 오류를 어떻게 해결할 수 있습니까?
- 15. C++ 템플릿 재귀 - 어떻게 해결할 수 있습니까?
- 16. AVAudioPlayer는 iPod을 끕니다 - 어떻게 해결할 수 있습니까?
- 17. PicasawebService 오류를 어떻게 해결할 수 있습니까?
- 18. IE7에서 어떻게 정렬 문제를 해결할 수 있습니까?
- 19. MD5의 취약점은 무엇이며 어떻게 해결할 수 있습니까?
- 20. 어떻게 JBoss 원격 오류를 해결할 수 있습니까?
- 21. 각형`$ broadcast` 문제 - 어떻게 해결할 수 있습니까?
- 22. PHP에서 smarty 함수를 어떻게 해결할 수 있습니까?
- 23. SQL에서이 구문 오류를 어떻게 해결할 수 있습니까?
- 24. 어떻게 CMake의 package_find의 충돌을 해결할 수 있습니까?
- 25. 어떻게 Automata FSM에서 오류를 해결할 수 있습니까?
- 26. Google지도가로드되면 회색으로 표시됩니다. 어떻게 해결할 수 있습니까?
- 27. msvcp110.dll, 어떻게 해결할 수 있습니까?
- 28. 이 모호성을 어떻게 해결할 수 있습니까? mem_fun?
- 29. 어떻게 소켓 인스턴스화 오류를 해결할 수 있습니까?
- 30. 어떻게 평생 동안 문제를 해결할 수 있습니까?
의 중복 가능성 [org.hibernate.LazyInitializationException : 제대로 Hibernate의 지연로드 기능을 사용하는 방법 (http://stackoverflow.com/questions/5837169/org-hibernate-lazyinitializationexception-how-to-properly-use 최대 절전 모드 - 게으른 모드) –