如何正确公开延迟加载的多个字段,以便用户可以在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提供者.
select x from X left join fetch x.y y
完成此工作后,您可以使用专门创建的控制器覆盖您的get语句,如下所述:Spring Data REST: Override repository method on the controller
我认为可能值得尝试的其他选项是在Spring数据存储库中添加@Lazy注释.
原文地址:https://www.jb51.cc/spring/432378.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。