Tôi có gì:
@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
}
Thật là một vấn đề:
Vấn đề là tôi không thể kéo bộ sưu tập lười biếng sau khi phiên đã được đóng. Nhưng tôi cũng không thể không đóng một phiên trong phương pháp tiếp tục .
Thật là một giải pháp (giải pháp thô):
a) Trước khi phiên đóng, buộc ngủ đông để kéo các bộ sưu tập lười biếng
entity.getAddresses().size();
entity.getPersons().size();
....
b) Có thể một cách khó hiểu hơn là sử dụng @Fetch(FetchMode.SUBSELECT)
chú thích
Câu hỏi:
Cách thực hành tốt nhất / cách phổ biến / cách nhẹ nhàng hơn để làm điều đó là gì? Có nghĩa là chuyển đổi đối tượng của tôi thành JSON.