gpt4 book ai didi

java - 将延迟初始化对象设置为 null,而对象在 jpa 中使用 hibernate 代理

转载 作者:行者123 更新时间:2023-12-02 09:29:18 25 4
gpt4 key购买 nike

例如我有如下三个类(class)

User{
Integer id;
...
}

Book{
Integer id;
....

@ManyToOne(fetch=FetchType.lazy)
User insertedBy;
}

Author{
Integer id;
List<Book> books;
}

现在我需要在同一页面中显示作者列表及其撰写的书籍所以我使用 jpa 存储库通过 findAll() 方法获取作者。在这里我不需要插入一列书,所以我用延迟加载来疯狂他们。

当我尝试使用 Gson 将这些作者列表转换为 json 对象时。它在 User 类中给出了延迟加载异常(Hibernate 代理...未找到 session ...)

我遵循了该网络中给出的许多方法,例如TypeAdapters。没有什么可以帮助我。我只是想在延迟加载中将 BooksinsertedBy 列设置为 null

现在我使用Dto类来避免insertedBy/使insertedBy为空。

有没有其他简单的方法而不将其转换为Dto。

我多次遇到这个问题。一直以来我最终都转换成了 Dto。

如果有人知道答案请帮我解决。

最佳答案

Hibernate 中的“延迟加载”意味着子级在加载父级时实际上并未加载,通常当您在迭代期间尝试访问子级时,它就会被加载。在您的情况下,您会收到此延迟加载异常,因为当 gson 尝试访问子级以将其映射到 JSON 对象时, session 已经关闭。

也许您可以要求 GSON 在使用 Gson 提供的 ExclusionStrategy 类映射到 JSON 时忽略该字段。

关于java - 将延迟初始化对象设置为 null,而对象在 jpa 中使用 hibernate 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58110253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com