Hibernate正确的级联映射

时间:2017-05-15 15:57:51

标签: java postgresql hibernate persistence

我是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字段中设置引用

我应该使用哪种映射?如何正确达到我的目标?

1 个答案:

答案 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);