Lo que tengo:
@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
}
Que problema:
El problema es que no puedo extraer la colección perezosa después de cerrar la sesión. Pero tampoco puedo no cerrar una sesión en el método de proceder .
Qué solución (solución gruesa):
a) Antes de cerrar la sesión, fuerce la hibernación para extraer colecciones perezosas
entity.getAddresses().size();
entity.getPersons().size();
....
b) Quizás una forma más elegante es usar la @Fetch(FetchMode.SUBSELECT)
anotación
Pregunta:
¿Cuál es una mejor práctica / una forma común / una forma más elegante de hacerlo? Significa convertir mi objeto a JSON.