gpt4 book ai didi

java - @LazyLoading 和 JsonOutput

转载 作者:行者123 更新时间:2023-11-29 08:36:41 27 4
gpt4 key购买 nike

正在从事一个使用 Spring/JPA/Rest 的项目。我们有一个类,它有一个 @OneToMany 字段(在下面的例子中说 Student ),它被标记为延迟加载。然而,当我们在 postman 中测试输出时,我们看到了类(class)的完整 json 和所有学生的详细信息。

public class CourseList{

private String Course;
//other fields

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private <Set>Student students;

//Getters and Setters

我对延迟加载的理解是,数据库的获取仅在对特定字段的显式调用 时发生。我们应该只看到 json 中出现的类(class)详细信息,而不是地址详细信息。为什么我们也看到地址详细信息?

如果我对 LazyLoading 的理解不正确或者它是否出于某种原因不适用于这种情况,有人可以帮助澄清吗?谢谢。

最佳答案

您的 JSON 库将递归读取对象的所有属性以生成输出。所以它正在访问学生集。

根据我的经验,这里有三种可能的结果:

  1. JSON 序列化发生在 JPA session 之外,因此对象是分离的。由于学生集是延迟加载的,因此您会遇到异常。

  2. JSON 序列化发生在 JPA session 内部,因此当 JSON 库访问学生集时,数据将从数据库中获取。

  3. JSON 序列化发生在 JPA session 之外,但您以某种方式访问​​了在此之前和 JPA session 内部设置的学生。数据已获取并在分离的对象上可用。

我遇到过这个问题,我强制选择了第三个选项。我的第一次尝试给了我异常(选项 1),但随后我强制从延迟加载集中读取数据以获取 JSON 序列化的数据。

关于java - @LazyLoading 和 JsonOutput,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43579457/

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