Hibernate正确的级联映射

Hibernate correct cascade mapping

我是 hibernate 的新手,我设法让它与一些表和外键一起工作,但我需要保存 java 对象的层次结构,我不知道如何以最好的方式做到这一点.我会像这样简化我的问题

a Request 可能产生 0..* Response

一个响应关联到1个请求

一个Response也有2个ResponseDetail对象

一个 ResponseDetail 关联到 1 Response

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 我会得到一些响应,手动设置他们的 Request 对象,我需要保存这个响应并自动让休眠保存 ResponseDetail rd1 和 rd2,老实说我不知道如何进行。

理想情况下,我需要一种在某些响应上使用休眠保存方法的方法,它会自动将 ResponseDetail 保存在数据库中并在 rd1 和 rd2 字段中设置引用

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

@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
}

在保存之前,在您的服务部分,您应该为所有子对象设置父对象(本例中为请求)。

for(Resposne res:request.getResponses(){ 
    res.setRequest(request);
}
yourService.save(request);