2014-09-12 48 views
0

我有一個名爲物業Grails領域模型訪問使用SQL數據庫的內容加入

Class Property{ 
    String name 
    RoomPreference roomPreference 
} 

這裏RoomPreference是另一種模式的模式。

Class RoomPreference{ 
    String age 
} 

我在這些表中存儲數據。我發現在Property表中有字段'ROOM_PREFERENCE_ID'。 'ID'是RoomPreference表中的一個字段。 對於某些任務,我需要編寫一個連接這些表的SQL查詢。

我寫的,

select * from 
Property p, RoomPreference r 
where p.ROOM_PREFERENCE_ID=r.ID 

但它給出了一個錯誤,指出存在的屬性表沒有現場ROOM_PREFERENCE_ID。加入這些表的解決方案是什麼?我也嘗試過'roomPreferenceId'。但它給出了一個錯誤。

+1

如果這是純粹的'sql',那麼表名應該用'Room_Preference'作爲連字符(除非你已經映射了它們)。如果它是'HQL',那麼字段名稱就是id。你能展示你如何執行這個查詢嗎?以及每個域的映射閉包? – Alidad 2014-09-12 19:33:25

+0

的選擇P \ \t \t \t \t從屬性P,RoomPreference r \ \t \t \t \t其中\ \t \t \t \t p.status = 'ACTIVE' \ \t \t \t \t $ {面膜? '和內(p.position,:掩模)=真': ''} \ \t \t \t \t $ {additionalConstraints}和p.ROOM_PREFERENCE_ID = r.id \ \t \t \t \t $ {additionalConstraintsForRoomPreference} \ \t \t \t \t $ {ORDERBY} \ \t \t \t \t \t \t「) – 2014-09-15 08:27:24

回答

0

的SQL查詢如下寫入。 INNER JOIN子句將加入表,所以在'where'子句之後不應該有'p.room_preference_id = r.id'子句。

0

這是不能夠識別column.So你需要添加以下: 添加映射域RoomPreference

class RoomPreference { 
    Long id 
    .... 
    static mapping = { 
     id column:"ROOM_PREFERENCE_ID" 

    } 

} 

鋸@Alidad評論現在可以正確。不知道你是否正在嘗試hsql或純sql? 如果您使用hql,那麼按照@Alidad所述,在進行連接時使用id而不是ROOM_PREFERENCE_ID。 靜態映射屬性總是可取的,因爲它有時可以避免不必要的映射錯誤。

希望它有幫助。

Select p 
from Property p INNER JOIN p.roomPreference r 
where 
    .......... 

這樣表處於休眠或HQL加入:

+0

但屬性表中已經包含了場ID作爲它的鍵。 – 2014-09-12 21:43:58