问题原因:
级联查询循环应用了toString方法
解决方法:
删除其中一方的toString方法,或者将其中一方toString方法循环引用的属性去掉
实体类 orders
package com.picc.hibernate.entity; import lombok.Getter; import lombok.Setter; @Getter @Setter public class Orders { private Integer id; private String name; private Customer customer; @Override public String toString() { return "Orders{" + "id=" + id + ", name='" + name + '\'' + ", customer=" + customer + '}'; } }
实体类 Customer
package com.picc.hibernate.entity; import lombok.Getter; import lombok.Setter; import java.util.Set; @Setter @Getter public class Customer { private Integer id; private String name; private Set<Orders> orders; @Override public String toString() { return "Customer{" + "id=" + id + ", name='" + name + '\'' + ", orders=" + orders + '}'; } }
查询操作
package com.picc.hibernate.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.query.Query; import java.util.List; public class TestHql1 { public static void main(String[] args) { //创建 Configuration Configuration configuration = new Configuration().configure(); //获取 SessionFactory SessionFactory sessionFactory = configuration.buildSessionFactory(); //获取 Session Session session = sessionFactory.openSession(); String hql = "from Customer"; Query query = session.createQuery(hql); List list = query.list(); for (Object customer : list) { System.out.println(customer); } session.beginTransaction().commit(); session.close(); } }
报错内容
Exception in thread "main" java.lang.StackOverflowError at java.util.HashMap$KeyIterator.<init>(HashMap.java:1467) at java.util.HashMap$KeySet.iterator(HashMap.java:917) at java.util.HashSet.iterator(HashSet.java:173) .....