java – Spring Data Rest JPA – 无法延迟加载OneToMany双向关系

前端之家收集整理的这篇文章主要介绍了java – Spring Data Rest JPA – 无法延迟加载OneToMany双向关系前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有两个实体,Company和Job,具有OneToMany双向关系.我的问题是,我不能懒得加载公司的列表< Job>工作.

例如,当我这样做时:

GET / api / companies / 1这是JSON响应:

  1. {
  2. "id": 1,"name": "foo",...
  3. "_embedded": {
  4. "jobs": [
  5. {...},...
  6. {...}
  7. ],"employees": [
  8. {...},{...}
  9. ]
  10. },"_links": {
  11. "self": {
  12. "href": "http://localhost:8080/api/companies/1"
  13. },"jobs": {
  14. "href": "http://localhost:8080/api/companies/1/jobs"
  15. },"employees": {
  16. "href": "http://localhost:8080/api/companies/1/employees"
  17. }
  18. }
  19. }

我不想拥有_embedded,因为我没有设置FetchType = EAGER.
这是我的模特:

Company.java

  1. @Entity
  2. public class Company {
  3.  
  4. @Column(nullable = false,unique = true)
  5. private String name;
  6.  
  7.  
  8. @OneToMany(mappedBy = "company",fetch = FetchType.LAZY)
  9. private List<Job> jobs;
  10.  
  11. ...
  12.  
  13. public Company() {
  14. }
  15.  
  16. ...
  17.  
  18. }

Job.java

  1. @Entity
  2. public class Job {
  3.  
  4. @Column(nullable = false)
  5. public String title;
  6.  
  7. @Column(length = 10000)
  8. public String description;
  9.  
  10. @ManyToOne(fetch=FetchType.LAZY)
  11. private Company company;
  12.  
  13. ...
  14.  
  15. public Job() {
  16. }
  17.  
  18. ...
  19.  
  20. }

正如您所看到的,其他OneToMany关系(员工)也会发生同样的事情.我可以避免每次都返回整个职位空缺或员工名单吗?

编辑:从工作方面,懒惰负载工作正常!我没有得到与工作相关的公司的回复.我必须明确地做/ api / jobs / 123 /公司以获得公司.

EDIT2:预测仅适用于集合.在这种情况下,它不是我需要的.节选可行,但我想避免它们.我不想明确做/ api / companies / 1?projection = MyProjection因为我不会使用多个.我想更改默认行为,就像集合中的投影一样.

编辑3:我试过这个

  1. @RestResource(exported = false)
  2. @OneToMany(mappedBy = "company")
  3. private List<Job> jobs;

我得到错误检测到具有相同关系类型的多个关联链接!消除关联歧义.

真的很烦人我只需要摆脱_embedded.什么?

解决方法

您可以使用Entity Graph.Entity图用于在运行时覆盖属性映射的提取设置.例如
  1. @Repository
  2. public interface GroupRepository extends CrudRepository<GroupInfo,String> {
  3.  
  4. @EntityGraph(attributePaths = { "members" })
  5. GroupInfo getByGroupName(String name);
  6.  
  7. }

从Spring Data Jpa文档“4.3.10.配置Fetch-和LoadGraphs”
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/

另外;

猜你在找的Java相关文章