2016-07-26 75 views
0

我在專用網絡上工作,因此太難以複製和粘貼我的代碼。我發現了一堆接近我需要的答案,但沒有一個能解決問題。我會試着做一個我的代碼的簡單例子,希望能夠解釋我的問題。使用Hibernate註釋映射表的一列

@Table(name="DRIVER") 
class Driver { 
    long id; //ID - primary key of Driver 
    String driverIdentStr; // DRIVER_IDENT_STR - like driver's license # 
}//end class Driver 

@Table(name="GROUP_PARTICIPANT") 
class GroupParticipant { 
    long id; //ID - primary key of GroupParticipant 
    long driverId; //DRIVER_ID - id of the Driver participanting and maps to Driver.id 

    //I just want this one value from Driver and not the whole Driver... 
    //I've tried: 
    //@Formula("(select driverIdentStr from Driver where Driver.id = DRIVER_ID)") 
    //also tried: 
    //@Column(table="DRIVER", name="driverIdentStr") 
    String driverIdentStr; 
}//end class GroupParticipant 

該@Formula失敗,「表或視圖未找到」,但我肯定有一個Driver類定義映射到DRIVER表。當我將@Formula中的查詢語言改爲SQL而不是HQL時,Hibernate抱怨GROUPPARTICIPANT0.driverIdentStr是一個無效的標識符 - 認爲它試圖從GroupParticipant檢索driverIdentStr,而不是從Driver(??)獲取值。

@Column失敗,我想,因爲我不知道如何映射到驅動程序,我有GroupParticipant驅動程序。

底線,我想不出如何獲取GroupParticipant.driverIdentStr從加入Driver.id GroupParticipant.driverId和獲取Driver.driverIdentStr。

任何幫助將不勝感激。

回答

1

這裏是什麼工作?

@Formula

我找到了答案,在( 「(從驅動d,其中d.ID = DRIVER_ID)選擇d.DRIVER_IDENT_STR」): http://gokhan.ozar.net/hibernate-derived-properties-formula-annotation 「更復雜的示例」標題下的 。

下面是我從閱讀,從示例...

  1. 只有在公式註釋SQL(無HQL所有)
  2. 學會發現上面的例子之前,我用d。在WHERE但不在公式查詢的SELECT部分​​和Hibernate抱怨。在那一點上,我認爲Hibernate忽略了我的公式註釋,並試圖從主表中獲取值,但它不會忽略我的公式,我的公式基本上告訴它從主表中獲取值(因爲d。不習慣這樣說)

謝謝!

0

@Formula註釋被解釋爲SQL片段,所以下面應該根據你的映射工作,假設標準的命名:

@Formula("SELECT driverIdentStr FROM DRIVER WHERE id = driverId") 

澄清:

  1. driverIdentStr是列名映射到該屬性的實體Driver
  2. id是實體Driver中的主鍵列名稱。
  3. driverIdGroupParticipant中的列名。
  4. 在數據庫區分大小寫的情況下,我使用了明確的表名DRIVER
相關問題