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

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

发布时间:2020-12-15 00:35:19 所属栏目:Java 来源:网络整理
导读:我有两个实体,Company和Job,具有OneToMany双向关系.我的问题是,我不能懒得加载公司的列表 Job工作. 例如,当我这样做时: GET / api / companies / 1这是JSON响应: { "id": 1,"name": "foo",... "_embedded": { "jobs": [ {...},... {...} ],"employees": [
我有两个实体,Company和Job,具有OneToMany双向关系.我的问题是,我不能懒得加载公司的列表< Job>工作.

例如,当我这样做时:

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

{
  "id": 1,"name": "foo",...
  "_embedded": {
    "jobs": [
      {...},...
      {...}
    ],"employees": [
      {...},{...}
    ]
  },"_links": {
    "self": {
      "href": "http://localhost:8080/api/companies/1"
    },"jobs": {
      "href": "http://localhost:8080/api/companies/1/jobs"
    },"employees": {
      "href": "http://localhost:8080/api/companies/1/employees"
    }
  }
}

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

Company.java

@Entity
public class Company {

    @Column(nullable = false,unique = true)
    private String name;


    @OneToMany(mappedBy = "company",fetch = FetchType.LAZY)
    private List<Job> jobs;

    ...

    public Company() {
    }

    ...

}

Job.java

@Entity
public class Job {

    @Column(nullable = false)
    public String title;

    @Column(length = 10000)
    public String description;

    @ManyToOne(fetch=FetchType.LAZY)
    private Company company;

    ...

    public Job() {
    }

    ...

}

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

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

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

编辑3:我试过这个

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

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

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

解决方法

您可以使用Entity Graph.Entity图用于在运行时覆盖属性映射的提取设置.例如
@Repository
public interface GroupRepository extends CrudRepository<GroupInfo,String> {

  @EntityGraph(attributePaths = { "members" })
  GroupInfo getByGroupName(String name);

}

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

另外;

(编辑:李大同)

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

    推荐文章
      热点阅读