我有2个实体:task
和user
。一个任务可以有多个用户。因此,我使用@jointable
注释,如下所示:
@ManyToMany
@JoinTable(name = "tasks_users",
joinColumns = @JoinColumn(name = "taskid"),
inverseJoinColumns = @JoinColumn(name = "userid")
)
private Set<User> users = new HashSet<>();
但是,当我尝试通过GET
请求获取所有任务时,我只有任务信息,而没有关于用户的信息:
获取所有任务
{
"_embedded": {
"task": [
{
"taskname": "Football",
"taskchief": "Jean Dupond",
"startdate": "2019-02-18",
"enddate": "2019-05-05",
"status": 1,
"_links": {
"self": {
"href": "http://localhost:8082/tasks/de7d9052-4961-4b4f-938a-3cd12cbe1f82"
}
}
},
{
"taskname": "Blockchain project",
"taskchief": "Léo Dubois",
"startdate": "2019-03-01",
"enddate": "2019-06-24",
"status": 1,
"_links": {
"self": {
"href": "http://localhost:8082/tasks/425e7701-02c6-4de3-9333-a2459eece1c8"
}
}
}
]
},
"_links": {
"self": {
"href": "http://localhost:8082/tasks"
}
}
}
这是正常行为吗?
感谢您的回答和建议。
PS:告诉我是否需要特定的代码,我会上传它。
答案 0 :(得分:1)
我认为您必须更改获取类型以加载您的实体(用户)。
默认情况下,在两个实体之间的多对多关系中,JPA应用LAZY加载。
这意味着您的实体将仅按需加载,尤其是在accessor方法的首次调用时。
如果您将获取类型更改为EAGER,则默认情况下,与TASKS实体关联的USER(S)将被加载到您的USERS集合中。
您可以通过执行以下操作来实现:
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "tasks_users",
joinColumns = { @JoinColumn(name = "taskid") },
inverseJoinColumns = { @JoinColumn(name = "userid") })
private Set<User> users = new HashSet<>();