处理使用Spring/JPA/Rest的项目。我们有一个类,它有一个@OneToMany字段(例如下面的示例中的say),它被标记为延迟加载。然而,当我们用邮递员测试输出时,我们看到了课程的全部json和所有的学生细节。
public class CourseList{
private String Course;
//other fields
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private <Set>Student students;
//Getters and Setters}
我对延迟加载的理解是,只有在显式调用特定字段时,数据库的获取才会发生。我们应该只看到json中提到的课程细节,而不是地址details..why,我们也看到了地址细节吗?
如果我对LazyLoading的理解是不正确的,或者它是否由于某种原因而不适用于这种情况,那么有人能帮助澄清吗?谢谢。
发布于 2017-04-24 05:52:23
您的JSON库将递归地读取对象的所有属性,以便生成输出。所以它访问的是学生的集合。
根据我的经验,这里有三种可能的结果:
我有过这样的问题,我强迫了第三种选择。我的第一次尝试给出了异常(选项1),但随后我强制从延迟加载的集合中读取数据,以获取JSON序列化的数据。
发布于 2017-04-24 12:09:45
Spring注册一个OpenEntityManagerInViewInterceptor。春季启动默认配置spring.jpa.open-in-view = true。如果要禁用该行为,请添加配置spring.jpa.open-in-view = false。
注册OpenEntityManagerInViewInterceptor。将JPA EntityManager绑定到请求的整个处理过程中的线程。
发布于 2017-04-24 05:36:47
// ^_^?
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
public Link Student student;要返回CourseList (包括List<Student> ),需要创建Response或Student实体,您必须确保没有@ManyToOne到CourseList,否则会发生StackOverflow错误。
本教程还提到了这个问题:Spring数据: JPA (Hibernate)一对多关系和N+1查询问题
https://stackoverflow.com/questions/43579457
复制相似问题