gpt4 book ai didi

java - 如何使用 HATEOAS 通过 @JoinTable 获取信息

转载 作者:行者123 更新时间:2023-12-02 10:08:16 28 4
gpt4 key购买 nike

我有 2 个实体:任务用户。一项任务可以有多个用户。所以我使用 @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:如果您需要具体代码,请告诉我,我会上传。

最佳答案

我认为您必须更改加载实体用户的获取类型。

默认情况下,在两个实体之间的多对多关系中,JPA 应用 LAZY 加载。

这意味着您的实体将仅根据需要加载,特别是在第一次调用访问器方法时。

如果您将获取类型更改为 EAGER,则默认情况下,与您的任务实体关联的用户(在您的情况下)将加载到您的用户集合中。

您可以通过执行以下操作来实现:

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "tasks_users",
joinColumns = { @JoinColumn(name = "taskid") },
inverseJoinColumns = { @JoinColumn(name = "userid") })
private Set<User> users = new HashSet<>();

关于java - 如何使用 HATEOAS 通过 @JoinTable 获取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55182317/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com