2011-07-28 37 views
1

我已經創建了一個計算兩個表格行的函數的SQL視圖。我想使用視圖來限制hibernate查詢的輸出,但我不確定最好的方法。如何在Hibernate查詢中加入SQL視圖?

視圖封裝存儲功能:

CREATE FUNCTION f(ax, ay, bx, by) AS ... ; 

CREATE VIEW f_view AS 
    SELECT a.id a_id, b.id b_id, f(a.x, a.y, b.x, b.y) f FROM thing a, thing b; 

現在我想寫類似這樣的SQL查詢Hibernate查詢:

SELECT Thing t1 
INNER JOIN Thing t2 ... 
INNER JOIN ... 
INNER JOIN f_view v ON v.a_id = t1.id AND v.b_id = t2.id 
WHERE t2.id = ? AND ... AND v.f < ? 

是否合理在一個Hibernate使用了這樣一個觀點查詢?

回答

1

你只能在這裏選擇是:

  1. 地圖你f_view在休眠(最有可能的不可變的)實體 - 然後你可以將其包含在你的HQL查詢。

  2. 將您的查詢寫爲SQL,並將其結果映射到您的(託管或非託管)實體。 Hibernate的參考文檔Chapter 18所有可能性都在這裏。

+0

謝謝。我很害怕這種情況。在寫這個問題之前,我採取了選項2,這個方法很有效,但它很醜。我考慮過映射視圖,但不知道如何處理視圖行的id。 –

+0

@kevin在視圖中,「a_id' /'b_id'組合是唯一的嗎?如果是這樣,您可以將其映射爲複合標識符。如果沒有,你也可以在那裏拋出'f',或者只要'f_view'是不可變的,永遠不會被Hibernate直接檢索(例如,只在連接中使用),你實際上可以使用重複的ID。 – ChssPly76

+0

是的,它是獨一無二的。我也考慮過這種方法。我會試一試。 –