내가 가진 것 :
@Entity
public class MyEntity {
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
@JoinColumn(name = "myentiy_id")
private List<Address> addreses;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
@JoinColumn(name = "myentiy_id")
private List<Person> persons;
//....
}
public void handle() {
Session session = createNewSession();
MyEntity entity = (MyEntity) session.get(MyEntity.class, entityId);
proceed(session); // FLUSH, COMMIT, CLOSE session!
Utils.objectToJson(entity); //TROUBLES, because it can't convert to json lazy collections
}
무슨 문제 :
문제는 세션이 종료 된 후에 게으른 수집을 가져올 수 없다는 것입니다. 그러나 나는 또한 진행 방법 에서 세션을 닫을 수 없습니다 .
어떤 해결책 (거친 해결책) :
a) 세션이 닫히기 전에 최대 절전 모드에서 지연된 컬렉션을 가져옵니다.
entity.getAddresses().size();
entity.getPersons().size();
....
b) 아마도 더 우아한 방법은 @Fetch(FetchMode.SUBSELECT)
주석 을 사용하는 것입니다.
질문:
모범 사례 / 일반적인 방법 /보다 우아한 방법은 무엇입니까? 내 개체를 JSON으로 변환하는 것을 의미합니다.