Java 查询HQL查询结果时发生PersistentBag.toString()堆栈溢出错误
我是Java 查询HQL查询结果时发生PersistentBag.toString()堆栈溢出错误,java,hibernate,jpa,hql,Java,Hibernate,Jpa,Hql,我是Hibernate的初学者,并试图实现一个HQL查询 Query q= em.createQuery("select p from Person p join p.company c"); List<Person> l = q.getResultList(); System.out.println(l.get(0)); 公司 getters and setters @Override public Strin
Hibernate
的初学者,并试图实现一个HQL
查询
Query q= em.createQuery("select p from Person p join p.company c");
List<Person> l = q.getResultList();
System.out.println(l.get(0));
公司
getters and setters
@Override
public String toString() {
return "Company [id=" + id + ", name=" + name + ", persons=" + persons + "]";
}
有人能帮忙吗。当Person#toString
呼叫公司#toString
和公司#toString
再次呼叫Person#toString
时,你正面临着这个问题
因此,当Person#toString将其称为下面的toString定义时发生了什么:
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", company=" + company + "]";
}
现在你可以看到你已经污染了公司,这意味着你的返回语句实际上变成了
“Person[id=“+id+”,name=“+name+”,company=“+company.toString()+””代码>。因此,它调用了Company#toString(),现在看一下Company#toString()
的实现,它包含persons
对象的字符串连接。它再次调用Person#toString()
,并且它仍然在运行,方法堆栈溢出。Person类中的persons
类型是什么?键入错误,更正了它
getters and setters
@Override
public String toString() {
return "Company [id=" + id + ", name=" + name + ", persons=" + persons + "]";
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", company=" + company + "]";
}