![](/img/trans.png)
[英]Hibernate One-to-Many Mapping Using Annotations; I'm trying to use foreign key association to save a user id in another table.
[英]Mapping object with data from another table using foreign key with Hibernate
我正在嘗試使用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;
}
如果有可能,我希望使用注釋。
Responses
與Poss_resp
表的關系是多對一的,您應該在Response
類中映射此關系。 否則,在給出Responses.resp_id
,休眠狀態沒有足夠的知識來獲取Poss_resp.resp_text
您的Poss_resp
表應該映射到一個實體類(例如Class 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();
我不想要一個全新的對象。 有什么辦法可以做到這一點?
如果只圖long resp_id
代替PossResp
的對象PossResp
實體,恐怕你必須手動寫HQL / SQL /標准得到resp_text
使用long resp_id
然后將其設置回Response
通過setResp_text()
二傳手。 但是以這種方式,您絕對不能享受休眠IMO提供的好處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.