2012-01-16 61 views
1

考慮以下查詢。對於Subqueriers - 什麼是好? HQL或標準 - 訪問標準

SELECT * FROM T1 WHERE T1.id = (SELECT id1 FROM T2 where T2.id1 = (SELECT id2 FROM T3)) 
AND T1.anotherId IN (SELECT id3 FROM T3); 

我猜HQL比使用Criteria API和DetachedCriteria更高效嗎?

我在我的項目中實現了(主要)Criteria,它看起來很OOP。對眼睛也更容易(這取決於感知)

想法?

+0

這不是一個建設性的問題。 – 2012-01-16 10:29:58

+1

此查詢可以在沒有任何使用連接的單個子查詢的情況下重新實現。 HQL和標準不應該有任何區別:大部分時間用於執行查詢和獲取結果,無論用於構建查詢。如果你和你的同事發現標準比HQL更可讀(我不同意),然後使用標準。 – 2012-01-16 10:31:53

+0

高效率在哪? a)字符編寫,b)執行時間,c)解析時間? HQL在a)中獲勝明顯,但b)和c)應該幾乎相等 – Firo 2012-01-16 10:32:02

回答

1

對於複雜的查詢,我更喜歡使用Criteria API。

當您編寫JPQL/HQL查詢時,您是獨立的。在某些情況下(我沒有告訴你這是你的情況),Criteria可能會產生更好,更優化的查詢。

我一直使用這樣的規則:

  • 如果查詢是很簡單 - 使用JPQL
  • 如果是複雜的 - 使用標準
  • 如果它是標準太複雜 - 關於存儲的事程序或重新設計
+0

它適用於同樣的策略。除了第三次。我會盡量遠離SP。如果數據庫移交給你,只有很多你可以重新設計。如果你必須使用DetachedCritera,你會採取什麼策略?我用HQL寫了這個。 – 2012-01-16 12:10:12

+0

爲什麼你需要DetachedCriteria?您是否需要在事務/會話上下文之外準備查詢? – altanis 2012-01-16 17:26:06