欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SLF4J: Failed toString() invocation on an object of type [com.zhao.guang.xiao.top.po.BlogBean$Hibern

程序员文章站 2022-07-15 14:46:12
...

错误信息

SLF4J: Failed toString() invocation on an object of type [com.zhao.guang.xiao.top.po.BlogBean$HibernateProxy$GOvMqmkl]
Reported exception:
java.lang.*Error
	at com.zhao.guang.xiao.top.po.BlogBean.toString(BlogBean.java:21)
	at java.lang.String.valueOf(String.java:2994)
	at java.lang.StringBuilder.append(StringBuilder.java:131)
	at java.util.AbstractCollection.toString(AbstractCollection.java:462)
	at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:601)
	at java.lang.String.valueOf(String.java:2994)
	at java.lang.StringBuilder.append(StringBuilder.java:131)
	at com.zhao.guang.xiao.top.po.TypeBean.toString(TypeBean.java:17)
	at java.lang.String.valueOf(String.java:2994)
	at java.lang.StringBuilder.append(StringBuilder.java:131)
	at com.zhao.guang.xiao.top.po.BlogBean.toString(BlogBean.java:21)

        ....

在*官网看到了这篇错误的博客和我的错误信息是一致的网址为 https://*.com/questions/57340306/slf4j-failed-tostring-invocation-on-an-object-of-type-lombok/57341984#57341984

 

我的解决办法是文章的留言的这个办法

You have a bidirectional reference between Department (you omitted that field in the code in your question) and Employee (via departments).

Exclude one of these fields for the generated toString() (preferably the back-reference) using @ToString.Exclude.

PS: You will probably run into a similar problem for equals and hashCode. Exclude it there too using @EqualsAndHashCode.Exclude.


翻译过来就是

在department(您在问题的代码中省略了该字段)和employee(通过departments)之间有一个双向引用。
使用@tostring.exclude为生成的tostring()排除其中一个字段(最好是反向引用)。
注意:对于equals和hashcode,您可能会遇到类似的问题。也可以使用@equalsandhashcode.exclude排除它。

 

出现上面这个错误是因为

  1. 实体类使用@Data注解来自动生成getset方法与toString方法
  2. 实体类使用JPA方法来实现实体类之间的对应关系 一对一/一对多/多对多
  3. 因为实体类对应关系,之间有一个双向引用(我们看不到哪个字段,因为您省略了该字段,或者粘贴的代码错误)。这两个类中生成的toString()方法都无休止地相互调用。

解决办法使用Lombok的 @ToString.Exclude 来省略这个字段得toString()方法,如下

      SLF4J: Failed toString() invocation on an object of type [com.zhao.guang.xiao.top.po.BlogBean$Hibern

 

然后再次访问这个实体 ,因为不在对实体属性进行toString()所以不会再进行重复调用,进而解决了这个问题