2011-03-18 4 views
0

사용자가 선택을하고 바로 아래 아약스를 사용하는 웹 응용 프로그램이 있는데 선택 항목의 세부 정보가 표시되어야합니다. 예를 들어, 사용자는 상단 프레임에서 사람을 선택하고 하단 프레임에서는 모든 사람 세부 사항을 표시합니다. 거기에 느슨하게로드 된 컬렉션의 무리가 있습니다. 콜렉션 중 하나가 호출되면 lazyinitialization 예외가 발생합니다. 어떻게 이것을 피합니까? 어떻게 ajax 호출 후에 엔티티를 entityManager에 다시 연결해야합니까?요청한 엔티티를 다시 연결 범위 엔티티 관리자

답변

-1

이 기사에서 제시된 해결책을 찾아 보았습니다.

http://9mmedia.com/blog/?p=272 

답장을 보내 주셔서 감사합니다.

+0

링크가 작동하지 않습니다. – Andre

1

당신이 여기서 뭘하고있는 일을 몇 가지 방법이 있습니다 : 인격 엔티티의 모든 모음에 대한

  1. 사용 열망 로딩하지만,이 효과의 성능을 adversly 수 있습니다.
  2. JPA 2.0을 사용하는 경우 가장 간단한 방법은 OpenEntityManagerInView 인터셉터를 사용하는 것입니다. 그런 다음 JSON Jackson을 사용하여 Person 엔터티를 완전히 json-ify하고 JSON을 뷰에 반환 할 수 있습니다.
  3. 옵션 # 1과 옵션 # 2를 실행할 수없는 경우 프록시 대신 실제 컬렉션 개체를로드해야합니다. 세션/트랜잭션이 닫히기 전에 각각의 콜렉션 (콜렉션 A가 A라고 함)이 A.get (0) .someGetter()를 호출하기 때문에 콜렉션 A에있는 객체의 실제 인스턴스가로드됩니다. 각 컬렉션에 대해 수행해야합니다. 이 경우와 같이 특정 경우에 특정 방법을 사용할 수 있습니다.
  4. 세션/트랜잭션이 닫히기 전에 전체 Person 엔티티를 JSON (여기서는 아약스를 사용하는 것처럼)과 같은 다른 유형의 객체로 변환하십시오. 이렇게하려면 모든 컬렉션의 모든 개체를 반복하여 JSON 개체에 채우고 반환하십시오.
1

세션에서 이미 분리 된 엔터티에서 컬렉션을 가져 오는 동안 LazyInitializationException이 발생합니다.

그 때문에 엔티티를 다시 부착해야합니다. 즉, 엔티티를 관리해야합니다. 먼저 객체가 세션과 연관되어 있는지 확인합니다. 관련 컬렉션을 가져올 수 이후 &을 필요로 할 때

contains(Object object) : Check if this instance is associated with this Session. 

객체 상태를 바탕으로, 다시 상태를 읽을 수 있습니다.

refresh(Object object) : Re-read the state of the given instance from the underlying database. 
관련 문제