Ce que j'ai:
@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
}
Quel problème:
Le problème est que je ne peux pas extraire la collection différée après la fermeture de la session. Mais je ne peux pas non plus ne pas fermer une session dans la méthode continue .
Quelle solution (solution grossière):
a) Avant la fermeture de la session, forcez la mise en veille prolongée à extraire des collections paresseuses
entity.getAddresses().size();
entity.getPersons().size();
....
b) Une manière peut-être plus élégante est d'utiliser l' @Fetch(FetchMode.SUBSELECT)
annotation
Question:
Qu'est-ce qu'une meilleure pratique / une manière courante / une manière plus élégante de le faire? Cela signifie convertir mon objet en JSON.