本文主要是介绍Hibernate调用时栈满溢出的error,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在使用Hibernate框架时,可能会遇到栈满溢出的情况
原因是创建对象过多导致的
创建顾客Customer类,订单Orders类
package com.southwind.entity;import lombok.Data;import java.util.Set;@Data
public class Customer {private Integer id;private String name;//一个客户对应多个订单private Set<Orders> orders;
}
package com.southwind.entity;import lombok.Data;@Data
public class Orders {private Integer id;private String name;//一个订单对应一个客户private Customer customer;
}
测试
package com.southwind.test;import com.southwind.entity.Customer;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;public class Test4 {public static void main(String[] args) {//配置获取sessionConfiguration configuration = new Configuration().configure("hibernate.xml");SessionFactory sessionFactory = configuration.buildSessionFactory();Session session = sessionFactory.openSession();Customer customer = session.get(Customer.class,15);//注意这里,实体类中lombok自动生成了toString方法,而toString方法中调用了Orders对象,造成了循环调用,循环创建对象//解决方法:重写toString方法时去掉Orders的调用System.out.println(customer);session.close();}
}
由于Customer类和Orders类都导入了lombok,
所以会自动生成一个toString方法
Customer类
@Overridepublic String toString() {return "Customer{" +"id=" + id +", name='" + name + '\'' +", orders=" + orders +'}';}
Orders类
@Overridepublic String toString() {return "Orders{" +"id=" + id +", name='" + name + '\'' +", customers=" + customers +'}';}
着两个toString方法中都互相调用了对方的类方法,
所以会造成双方无限调用下去,最终栈满溢出
这篇关于Hibernate调用时栈满溢出的error的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!