在Restful-WebService响应中包含所有@OneToMany实体?

时间:2015-06-04 18:25:30

标签: java web-services rest jpa bidirectional-relation

首先发布在这里,所以请原谅任何最好的方法,以最好地引起你的注意/帮助我找到答案。 :)

没有详细介绍我的实际计划:

我有一个用户,可以注册许多设备,这些设备可以与许多遥控器关联,后者可以有多个按钮(命令(准确地说是LIRC命令))。

以下是4个实体的 @ManyToOne @OneToMany 部分的代码。

USERS

@OneToMany(mappedBy = "user")
private List<Devices> devices;

设备

@ManyToOne
@JoinColumn(name = "USER_ID")
private Users user;

@OneToMany(mappedBy = "device")
private List<Remotes> remotes;

遥控

@ManyToOne
@JoinColumn(name = "DEVICE_ID")
private Devices device;

@OneToMany(mappedBy = "remote")
private List<Commands> commands;

COMMANDS

@ManyToOne
@JoinColumn(name = "REMOTE_ID")
private Remotes remote;

它们都工作正常,数据库条目都有适当的外键,如果我理解正确,这应该是双向的。

致我的问题:

我的Restful Webservice请求是否可以响应用户的findAll()方式,不仅可以使用用户进行响应,还可以使用设备中的所有数据进行响应反过来返回属于远程的所有设备的遥控器命令

@GET
@Override
@Produces({"application/json"})
public List<Users> findAll() {
    return super.findAll();
}

如果需要,我将不得不通过所有实体并自己拼凑一个JSON,但在我开始这个旅程之前,我想知道是否有更简单的方法解决我的问题。

干杯

1 个答案:

答案 0 :(得分:0)

快速修复:

我必须更改我的实体中所有@ OneToMany和@ManyToOnes的Fetch和级联设置。

@XmlTransient
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "USER_ID")
private Users user;

@OneToMany(
        mappedBy = "device",
        fetch = FetchType.EAGER,
        cascade = {CascadeType.REMOVE, CascadeType.MERGE,CascadeType.PERSIST})
private List<Remotes> remotes;