gpt4 book ai didi

java - 使用 Hibernate 的外键将对象与另一个表中的数据映射

转载 作者:行者123 更新时间:2023-12-01 05:38:23 27 4
gpt4 key购买 nike

我正在尝试使用 Hibernate 和 javax 持久性注释从数据库填充此类中的数据。以下是相关的数据库结构。

table Poss_resp     
ID qst_id resp_text
int int text

table Responses
ID qst_id usr_id resp_id
int int int int

我正在尝试使用 Responses.ID 和 Poss_resp.resp_text 填充下面显示的 Response 类。 Poss_resp 保存问题的可能答案。响应保存给出的实际答案。 resp_id 是 Poss_resp 的外键。但是,我只想存储 resp_text 字符串,我不需要一个全新的对象。有什么方法可以实现这一目标吗?我无法弄清楚如何告诉 Hibernate 如何使用 Response 主键以外的其他内容,也没有确定正确的 JOIN 语法。

我的响应类:

@Entity
@Table(name="responses")
public class Response {

private long id;
private long qst_id;
private long resp_id;
private String resp_text;


/**
*
*/
public Response() {
// TODO Auto-generated constructor stub
}


/**
* @return the id
*/
@Id
@Generated(value="assigned")
@Column(name="ID")
public long getId() {
return id;
}


/**
* @param id the id to set
*/
public void setId(long id) {
this.id = id;
}


/**
* @return the qst_id
*/
@Column(name="qst_id")
public long getQst_id() {
return qst_id;
}


/**
* @param qst_id the qst_id to set
*/
public void setQst_id(long qst_id) {
this.qst_id = qst_id;
}


/**
* @return the resp_id
*/
@Column(name="resp_id")
public long getResp_id() {
return resp_id;
}


/**
* @param resp_id the resp_id to set
*/
public void setResp_id(long resp_id) {
this.resp_id = resp_id;
}


/**
* @return the resp_text
*/
public String getResp_text() {
return resp_text;
}


/**
* @param resp_text the resp_text to set
*/
public void setResp_text(String resp_text) {
this.resp_text = resp_text;
}

如果可能的话,我更喜欢注释。

最佳答案

ResponsesPoss_resp 表的关系是多对一的,您应该在 Response 类中映射此关系。否则,hibernate 没有足够的知识来获取给定的 Responses.resp_id

Poss_resp.resp_text

您的 Poss_resp 表应映射到实体类(例如类 PossResp)

然后,您可以使用 @ManyToOne@JoinColumn 声明多对一关系,如下所示:

@Entity
@Table(name="responses")
public class Response {
..................
private PossResp possResp;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "resp_id")
public PossResp getPossResp() {
return possResp;
}
................

}

要获取给定 Response 对象的 resp_text,请调用

 response.getPossResp().getRespText();
<小时/>

I do not want a whole new object. Is there some way to achieve this?

如果你只映射long resp_id而不是PossResp实体中的PossResp对象,恐怕你必须手动编写HQL/SQL/Criteria 使用 long resp_id 获取 resp_text,然后通过 setResp_text() 将其设置回 Response setter 。但这样一来,你肯定无法享受到hibernate IMO提供的好处。

关于java - 使用 Hibernate 的外键将对象与另一个表中的数据映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7781884/

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