加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

java – 在Spring Data REST中获取和更新延迟加载的多个字段

发布时间:2020-12-15 01:33:05 所属栏目:大数据 来源:网络整理
导读:如何正确公开延迟加载的多个字段,以便用户可以在Spring Data REST中获取/ PATCH / POST / DELETE许多实体关系? 例如,给定一个由多对多关系绑定的Student实体和Teacher实体,使用以下POJO: @Entitypublic class Teacher { // owner of bidirectional relatio

如何正确公开延迟加载的多个字段,以便用户可以在Spring Data REST中获取/ PATCH / POST / DELETE许多实体关系?

例如,给定一个由多对多关系绑定的Student实体和Teacher实体,使用以下POJO:

@Entity
public class Teacher { // owner of bidirectional relationship
    @Id
    private int id;
    private String name;
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "teacher_student",joinColumns = @JoinColumn(name = "teacher_id"),inverseJoinColumns = @JoinColumn(name = "student_id"))
    private Set

实体被赋予存储库:

@RepositoryRestResource(path = "teacher")
public interface TeacherRepository extends CrudRepository

当我发送GET到localhost:8080 /老师时,我得到:

"_embedded": {
    "teacher": [
        {
        "name": "Bill Billie","_links": {
            "self": { "href": "http://localhost:8080/teacher/1" },"teacher": { ... },"students": { "href": "http://localhost:8080/teacher/1/students" }
        }},(more teachers here...)
    ]
}
...

但是,当我尝试GET到http://localhost:8080/teacher/1/students时,我得到了404 Not Found,即使老师“Bill Billie”确实有一个学生在数据库中与他相关联.

有趣的是,如果我将FetchType更改为FetchType.EAGER,一切正常,我可以执行预期的GET,PATCH等.是什么给出的?这可能是一个错误,还是我搞砸了什么?

tl; dr许多关系没有通过延迟提取正确暴露,但在急切提取时工作正常.我怎么能懒得拿起它?

编辑:如果重要,我使用Spring 4.2.6和Spring Boot 1.3.5,OpenJPA 2.4.1作为我的JPA提供者.

最佳答案
嗯我不确定为什么它不是自动获取更有经验的人必须要求的,但你可以为每个查询指定HQL的连接提取的手动提取.

select x from X left join fetch x.y y

完成此工作后,您可以使用专门创建的控制器覆盖您的get语句,如下所述:Spring Data REST: Override repository method on the controller

我认为可能值得尝试的其他选项是在Spring数据存储库中添加@Lazy注释.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读