我有两个实体,Company和Job,它们之间存在着OneToMany的双向关系。我的问题是我无法使用lazy load来加载Company的List jobs。
例如,当我执行以下操作时:
GET /api/companies/1,这是JSON响应:
作为您所看到的,在其他一对多关系中(员工),同样的事情也会发生。我能否避免每次返回整个职位空缺或员工列表?
编辑:从职位方面来看,延迟加载工作正常!我不会在响应中获得与职位相关的公司。我必须明确执行“/api/jobs/123/company”,以便获取公司。
编辑2:投影仅适用于集合。在这种情况下,这不是我需要的。摘录可能有效,但我想避免它们。我不想明确执行“/api/companies/1?projection=MyProjection”,因为我不会使用更多。我想改变默认行为,就像投影在集合中所做的那样。
编辑3:我尝试过这个。
例如,当我执行以下操作时:
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() {
}
...
}
作为您所看到的,在其他一对多关系中(员工),同样的事情也会发生。我能否避免每次返回整个职位空缺或员工列表?
编辑:从职位方面来看,延迟加载工作正常!我不会在响应中获得与职位相关的公司。我必须明确执行“/api/jobs/123/company”,以便获取公司。
编辑2:投影仅适用于集合。在这种情况下,这不是我需要的。摘录可能有效,但我想避免它们。我不想明确执行“/api/companies/1?projection=MyProjection”,因为我不会使用更多。我想改变默认行为,就像投影在集合中所做的那样。
编辑3:我尝试过这个。
@RestResource(exported = false)
@OneToMany(mappedBy = "company")
private List<Job> jobs;
我收到了错误信息:检测到多个关联链接具有相同的关系类型!澄清关联
。
这真的很烦人。我只需要摆脱_embedded
。有什么方法吗?
Company
中的集合是否应该被序列化的问题。即使关系只是普通的POJO而非映射到持久化对象,这也将是同样的问题。 - wrschneider@RestResource(exported = false)
或@JsonIgnore
应该足以隐藏jobs
字段(请参见此处)。 - David Riccitelli