Java 当对象在jpa中使用hibernate代理时,将惰性初始化对象设为null
例如,我有三门课,如下所示Java 当对象在jpa中使用hibernate代理时,将惰性初始化对象设为null,java,hibernate,jpa,Java,Hibernate,Jpa,例如,我有三门课,如下所示 User{ Integer id; ... } Book{ Integer id; .... @ManyToOne(fetch=FetchType.lazy) User insertedBy; } Author{ Integer id; List<Book> books; } 用户{ 整数id; ... } 书{ 整数id; .... @manytone(fetch=FetchType.lazy) 用户插入方
User{
Integer id;
...
}
Book{
Integer id;
....
@ManyToOne(fetch=FetchType.lazy)
User insertedBy;
}
Author{
Integer id;
List<Book> books;
}
用户{
整数id;
...
}
书{
整数id;
....
@manytone(fetch=FetchType.lazy)
用户插入方式;
}
作者{
整数id;
列出书籍;
}
现在我需要在同一页中显示作者列表,以及他们所写的书籍
因此,我使用jpa存储库使用findAll()方法获取作者。在这里,我不需要插入的
一列列的书,所以我懒洋洋地把它们弄疯了
当我试图用Gson将这些作者列表转换为json对象时。
它在用户类中给出延迟加载异常(Hibernate代理…未找到会话…)
我遵循了这个网络中给出的许多方法,如TypeAdapters。
什么也帮不了我。
我只是想让书籍的列插入作为延迟加载中的null
现在我使用Dto类来避免insertedBy/make insertedBy为null
有没有其他不转换为Dto的简单方法
我多次面对这个问题。所有这些时间我最终都转换成了Dto
如果有人知道答案,请帮我解决 Hibernate中的“延迟加载”意味着在加载父级时,实际上不会加载子级,通常是在迭代期间尝试访问子级时,它会被加载。在您的情况下,您会收到这个延迟加载异常,因为当gson尝试访问子对象以将其映射到JSON对象时,会话已经关闭
可能您可以要求GSON在使用GSON提供的ExclutionStrategy类映射到JSON时忽略该字段 您的
User
类是否有一个List
字段,该字段使用Hibernate正确映射?当您将对象转换为JSON时,将调用所有字段的getter。当调用insertedBy
的getter时(当hibernate会话关闭时),它将抛出延迟加载异常。如果要忽略此字段以转换为JSON,只需使用@JsonIgnore
对该字段进行注释,现在它将不会转换为JSON。在这种情况下,DTO是一种方法。向前端/API/集成层公开域模型通常不是一个好主意。有一个DTO使这种区别变得清晰,并允许两者独立发展。Mushif Ali Nawaz,在图书列表页面中,我需要显示insertedBy列。如果我将该字段设为jsonIgnore,我可能无法使用该列augusto,这就是我现在要做的,如果我有很多类似的场景,那么必须为每个模块编写转换代码。如果我使用像Dozer mapper这样的类转换机制,这些功能需要花费大量时间来转换记录列表。这使得应用程序速度变慢