java - @LazyLoading 和 JsonOutput

标签 java json spring jpa jackson

正在开发一个使用 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 内部的学生集。数据已获取并可在分离的对象上使用。

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

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

相关文章:

java - Jenkins无法识别gradle子项目的测试

android - JSONArray 在解析时返回 null

javascript - Node.js 处理异步

java - 无法从类路径加载属性文件

java - Consumers 适用于 application/json 但不适用于 text/plain

java - Selenium WebElement getCssValue 背景颜色被歪曲?

java - 在mybatis中返回HashMap,在spring MVC中作为ModelAttribute使用

java - 使用用户输入值显示数组列表中的特定对象

java - 解析从网站 Api 提取的 Json 代码中的数据时出现黑屏输出

java - 在 Java 8 forEach 循环中使用 Spring Data JPA 存储库是线程安全的吗?