gpt4 book ai didi

java - Hibernate 正确的级联映射

转载 作者:行者123 更新时间:2023-12-02 13:10:11 27 4
gpt4 key购买 nike

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

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

响应与 1 个请求关联

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

理想情况下,我需要一种方法在某些响应上使用 hibernate 的 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
}

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

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

关于java - Hibernate 正确的级联映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43983989/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com