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);
我是 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);