我是hibernate的新手,我设法让它与一些表和外键一起工作,但我需要保存java对象的层次结构,我不知道如何以最好的方式做到这一点。我会像这样简化我的问题
请求可能会产生0 .. * 响应
响应与1 请求
相关联响应还有2个 ResponseDetail 对象
ResponseDetail 与1 响应
相关联Class Request{
@Id
int reqId;
}
Class Response
{
@Id
int respId;
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "reqId")
Request req; //foreign key from request
ResponseDetail rd1;
ResponseDetail rd2;
}
Class ResponseDetail{
???
int rdId;
other stuff...
}
现在java-side我会得到一些Response,手动设置他们的Request对象,我需要保存这个响应并自动让hibernate保存ResponseDetail rd1& rd2,老实说,我不知道如何继续。
理想情况下,我需要一种方法在某些响应中使用hibernate的save方法,它会自动将ResponseDetail保存在DB中并在rd1和rd2字段中设置引用
我应该使用哪种映射?如何正确达到我的目标?
答案 0 :(得分:1)
@Entity
class Request
{
@OneToMany(mapped-by="request", cascade=CascadeType.ALL)
public List<Response> getResponses()
// implementation
}
@Entity
class Response
{
@OneToOne
@JoinColumn(name="request_id")
public Request getRequest()
// implementation
}
在保存之前,在服务部分中,应为所有子对象设置Parent对象(在此示例中为Request)。
for(Resposne res:request.getResponses(){
res.setRequest(request);
}
yourService.save(request);