我是休眠的新手,设法使它可以与某些表和外键一起使用,但是我需要保存Java对象的层次结构,并且不知道如何以最佳方式进行操作。我会这样简化我的问题

一个请求可能会产生0 .. *响应

响应与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端,我将获得一些响应,手动设置其Request对象,然后我需要保存此响应,并自动让hibernate保存ResponseDetail rd1和rd2,老实说,我不知道该如何进行。

理想情况下,我需要一种在某些响应上使用休眠模式的save方法的方法,它将自动将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);

09-26 05:23