Hibernate的Java.lang.StackOverflowError
自己写用户表和角色表的多对多关系查询代码时,报出了这个错误,翻译过来是堆栈溢出的问题,之前写客户和角色的一对多表数据查询没有报过这个错。最后发现原因是两个对象的toString方法重写之后,应用程序递归太深了,所以发生了堆栈溢出。

解决方案:
可以将多的一方对象里面重写的toString方法去掉,或者两个对象里面重写的toString方法都去掉。(或者让私有成员属性中的代表外键的set集合在toString的方法中不参与即可)

Hibernate的Java.lang.StackOverflowError

注:在一对多的表中不会出现此问题,只在多对多表中出现!因为一对多表关系中,任何一方对象在调用toString方法过程中一次就可以输出完成.

例如:
客户-联系人关系:
Customer的toString方法输出结果:[客户成员变量,客户成员变量,…联系人集合{联系人成员变量,联系人成员变量,…客户对象}]

用户-角色(多对多关系)
User的toString方法输出结果
用户对象[…,角色集合{角色[…,用户集合{用户[…,角色集合{角色[…,用户集合{…死循环}]…}]…}]}]
这样会无限循坏输出语句,所以会报错,所以toString中不写或少写任意一方的集合变量就可以避免此错误

相关文章:

  • 2022-01-31
  • 2021-11-27
  • 2022-12-23
  • 2022-01-25
猜你喜欢
  • 2022-12-23
  • 2021-07-13
  • 2021-04-01
相关资源
相似解决方案