我是休眠的新手,设法使它可以与某些表和外键一起使用,但是我需要保存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);