簡體   English   中英

在Hibernate中使用外鍵將對象與另一個表中的數據映射

[英]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;
    }

如果有可能,我希望使用注釋。

ResponsesPoss_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM