У меня есть два объекта с отношением ManyToMany между ними. По какой-то причине, когда я пытаюсь получить все сущности из базы данных, я получаю исключение "statement closed"
.Заявление закрытое исключение при получении ManyToMany связанных элементов
Вот код:
public class Famille {
[...]
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "famille_personne",
[email protected](name="famille_id"), [email protected](name="personne_id"))
private Set<Personne> listPersonne;
[...]
@Override
public boolean equals(Object object){
if(object instanceof Famille){
Famille famille = (Famille) object;
return (nom.equals(famille.getNom())
&& ((listPersonne == null && famille.getListPersonne() == null)
|| (listPersonne != null && new HashSet(listPersonne).equals(new HashSet(famille.getListPersonne())))
)
);
}
return false;
}
}
public class Personne {
[...]
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "famille_personne",
[email protected](name="personne_id"), [email protected](name="famille_id"))
private Set<Famille> listFamille;
[...]
@Override
public boolean equals(Object object){
if(object instanceof Personne){
Personne personne = (Personne) object;
return (matricule.equals(personne.getMatricule()) && nom.equals(personne.getNom()));
}
return false;
}
@Override
public int hashCode() {
return Objects.hash(matricule, nom);
}
}
А вот метод с двумя запросами, я не могу выполнить в то же время:
public ArrayList<Famille> getListFamille(){
entityManager = entityManagerFactory.createEntityManager();
ArrayList<Famille> listFamille = new ArrayList<Famille>();
listFamille.addAll(entityManager.createQuery("from Famille", Famille.class).getResultList());
entityManager.close();
return listFamille;
}
public ArrayList<Personne> getListPersonne(){
entityManager = entityManagerFactory.createEntityManager();
ArrayList<Personne> listPersonne = new ArrayList<Personne>();
listPersonne.addAll(entityManager.createQuery("from Personne", Personne.class).getResultList());
entityManager.close();
return listPersonne;
}
Вот исключение, которое я получил:
org.postgresql.util.PSQLException: This statement has been closed.
Может кто-нибудь объяснить мне, как это работает и почему я получаю это исключение?
Я превратил мои два способа, как вы сказали, и он до сих пор не работает. Зачем мне начинать/совершать транзакцию? Никогда не делал этого так раньше, когда я получал некоторые значения, и он всегда работал –
. Я думаю, что это может быть проблема с нетерпеливой выборкой с обеих сторон. Пожалуйста, проверьте мой обновленный ответ. –
Прошу прощения за долгое время ответа. Я пробовал, как вы сказали, и я получаю исключение «не лениво инициализирую коллекцию роли». Иногда я хочу получить Personne.listFamille, а иногда и Famille.listPersonne, поэтому он не может работать ... –