2010-06-22 33 views
9

有沒有辦法告訴Hibernate在使用連接到另一個表時將Hibernate包裝到to_char中,或者相反地將NUMBER轉換爲VARCHAR?我有一種情況,我有一個表,其中包含一個VARCHAR類型的通用鍵列,其中存儲另一個表中的數字,該數字是一個數字。當Hibernate執行它生成的使用'='比較兩列的SQL時,我得到一個SQL異常。JPA或休眠 - 在不同類型的列上連接表

謝謝...

P.S.我知道這並不理想,但我堅持使用模式,所以我必須處理它。

回答

13

這應該可以使用多對一的公式。從部分5.1.22. Column and formula elements(溶液同樣在這種previous answer提及):

columnformula屬性可以 甚至可以相同 屬性或關聯映射內組合以 表達例如,奇異的連接 條件。

<many-to-one name="homeAddress" class="Address" 
     insert="false" update="false"> 
    <column name="person_id" not-null="true" length="10"/> 
    <formula>'MAILING'</formula> 
</many-to-one> 

使用註釋(如果你正在使用Hibernate 3.5.0-β-2 +,見HHH-4382):

@ManyToOne 
@Formula(value="(select v_pipe_offerprice.offerprice_fk from v_pipe_offerprice where v_pipe_offerprice.id = id)") 
public OfferPrice getOfferPrice() { return offerPrice; } 

或許檢查@JoinColumnsOrFormula

@ManyToOne 
@JoinColumnsOrFormulas(
{ @JoinColumnOrFormula([email protected](value="SUBSTR(product_idnf, 1, 3)", referencedColumnName="product_idnf")) }) 
@Fetch(FetchMode.JOIN) 
private Product productFamily; 
+2

謝謝你這麼多.. @JoinColumnsOrFormula註釋完美工作。你先生是個紳士和學者。 – user373614 2010-06-23 03:47:13

+0

@ user373614不客氣。 – 2010-06-23 11:50:46

+0

這是什麼意思「'MAILING'」? – Carlos 2013-11-26 09:37:14