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排除它。
出现上面这个错误是因为
- 实体类使用@Data注解来自动生成getset方法与toString方法
- 实体类使用JPA方法来实现实体类之间的对应关系 一对一/一对多/多对多
- 因为实体类对应关系,之间有一个双向引用(我们看不到哪个字段,因为您省略了该字段,或者粘贴的代码错误)。这两个类中生成的toString()方法都无休止地相互调用。
解决办法使用Lombok的 @ToString.Exclude 来省略这个字段得toString()方法,如下
然后再次访问这个实体 ,因为不在对实体属性进行toString()所以不会再进行重复调用,进而解决了这个问题