对于引用过多其他实体的实体,我一直在努力工作数小时(甚至不是几天),因此我决定用LAZY注释对实体进行注释,以提高性能。
使用LAZY fetch类型注释时,我在获取json数据时会遇到此异常
No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer
在堆栈跟踪的某个地方,我也发现了此错误
(to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ); nested exception is com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class
我已经在Google上进行了搜索,并尝试通过在实体上添加此异常来禁用该异常,并使用以下方法序列化以获取json,但不幸的是,尝试后无法获取json
@JsonIgnoreProperties({"hibernateLazyInitializer","userId"})
class Books{
//here is the relationship
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "userId")
private User userId;
此外,我尝试使用application.properties禁用该异常,但是在以下配置下,该异常仍然存在
spring.jackson.serialization.eager-serializer-fetch=true
spring.jackson.serialization.fail-on-empty-beans=false
spring.jackson.serialization.fail-on-self-references=false
spring.jackson.serialization.fail-on-unwrapped-type-identifiers=false
请提供一种方法,可以在ApplicationStartUp.java文件中配置和处理此异常。 请有人帮我摆脱困境
答案 0 :(得分:0)
看来您的问题有很多解决方案...您可以查看此link来查看它们...
通常,我会推荐DTO方法,但有时该解决方案意味着代码中的许多更改...
正如我在您的问题中看到的那样,您正在使用注释方法...如果我理解我提供的链接中提出的解决方案,则:
@JsonIgnoreProperties({“ hibernateLazyInitializer”,“ handler”})
应将其放在您的User
实体中,而不要放在您的Book
实体中! (尝试一下,但是在删除杰克逊属性之前,请先恢复弹簧配置)
希望获得帮助...