Що я маю:
@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
}
Яка проблема:
Проблема в тому, що я не можу витягнути ліниві колекції після закриття сеансу. Але я також не можу не закрити сесію методом продовження .
Який розчин (грубий розчин):
а) Перед тим, як сеанс закрито, змусьте сплячий режим витягнути ліниві колекції
entity.getAddresses().size();
entity.getPersons().size();
....
б) Можливо, більш витончений спосіб - використовувати @Fetch(FetchMode.SUBSELECT)
анотацію
Питання:
Яка найкраща практика / звичайний спосіб / більш витончений спосіб це зробити? Засоби перетворення мого об'єкта в JSON.