Java 如何使用HATEOAS通过@JoinTable获取信息
我有两个实体:Java 如何使用HATEOAS通过@JoinTable获取信息,java,spring,spring-boot,spring-hateoas,hateoas,Java,Spring,Spring Boot,Spring Hateoas,Hateoas,我有两个实体:task和user。一个任务可以有多个用户。所以我使用@jointable注释如下: @ManyToMany @JoinTable(name = "tasks_users", joinColumns = @JoinColumn(name = "taskid"), inverseJoinColumns = @JoinColumn(name = "userid") ) private Set<User> users = new HashSet
task
和user
。一个任务可以有多个用户。所以我使用@jointable
注释如下:
@ManyToMany
@JoinTable(name = "tasks_users",
joinColumns = @JoinColumn(name = "taskid"),
inverseJoinColumns = @JoinColumn(name = "userid")
)
private Set<User> users = new HashSet<>();
这是正常的行为吗
谢谢你的回答和建议
PS:如果您需要特定的代码,请告诉我,我将上载它。我认为您必须更改获取类型以加载您的实体用户
默认情况下,在两个实体之间的多对多关系中,JPA应用延迟加载。
这意味着您的实体将仅在需要时加载,特别是在访问器方法的第一次调用时加载。
如果将获取类型更改为“急切”,则默认情况下,与任务实体关联的用户(在您的情况下)将加载到用户集合中 您可以通过以下操作实现这一点:
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "tasks_users",
joinColumns = { @JoinColumn(name = "taskid") },
inverseJoinColumns = { @JoinColumn(name = "userid") })
private Set<User> users = new HashSet<>();
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name=“tasks\u users”,
joinColumns={@JoinColumn(name=“taskid”)},
inverseJoinColumns={@JoinColumn(name=“userid”)}
private Set users=new HashSet();
代码似乎不错。你可能错过了用户的getter setter吗?@Pred05不,当我不使用links HATEOAS时,它会起作用。但是,如果我使用链接,用户就会被拒绝……虽然从处理的角度来看,成批发送数据并因此减少请求数量以完成任务可能听起来很好,但这种方法的缺点是,您无法有效地利用缓存。尤其是用户数据不应该经常更改,因此非常适合缓存,这可能会比通过在一批中发送所有内容来强制尝试减少请求数量更能减少服务器上的负载。因此,缓存是REST的少数几个约束之一,而不是一个选项
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "tasks_users",
joinColumns = { @JoinColumn(name = "taskid") },
inverseJoinColumns = { @JoinColumn(name = "userid") })
private Set<User> users = new HashSet<>();