2012-11-16 88 views
8

我試圖在一個列上內部連接兩個表。 從數據庫方面看,沒有映射,因爲這是我不想討論的。使用HQL進行內部連接

我想使用INNER JOIN執行HQL查詢並檢索ROLE對象/結果。

這裏是我的HQL到目前爲止

session.createQuery( 「從角色的作用INNER JOIN參與作爲參與ON role.id = involvement.roleid WHERE involvement.id = X」)。名單( );

我看到ON在HQL上不可用。我如何明確地告訴Hibernate只在這一列上JOIN。

我想下面一個太

從角色的作用,參與爲參與選擇roleSpec WHERE role.ID = involvement.role_id和involvement.id = 27251352

但我得到的ROLE沒有映射到異常。

+0

改爲使用SQL。 HQL大多隻在你有適當的關係和實體映射時才起作用。 (你仍然可以做Theta風格的加入,但我不推薦這麼做) –

+0

你能告訴我如何使用Hibernate來執行SQL。其他應用程序廣泛使用Hibernate。 – Reddy

+0

在Hibernate的參考中搜索本機查詢 –

回答

14

請檢查您的ROLE確實是一個映射實體。 另外,你不需要執行「ON」 - hibernate知道什麼是連接列(我知道如何在JPA中定義這個) - 所以不需要在語句中提供它。 它應該是 -

session.createQuery("from Role as role INNER JOIN Involvement as involvement WHERE involvement.id = X").list(); 

我假設你有角色類映射到角色表,並參與類映射到Involement表。
也許你錯誤地使用了表名,這就是你得到「未映射」錯誤的原因。
我上次寫HQL(而不是JPA-QL)我使用了以下link作爲參考,它提供了所需的所有信息。