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

问题描述 投票:0回答:1

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

java spring spring-boot spring-hateoas hateoas
1个回答
1
投票

我认为您必须更改用于加载实体USERS的获取类型。 默认情况下,在两个实体之间的多对多关系中,JPA应用LAZY加载。 这意味着您的实体将仅在需要时加载,特别是在第一次调用访问器方法时。 如果您将获取类型更改为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<>();
© www.soinside.com 2019 - 2024. All rights reserved.