2016-04-27 26 views
-2

我有一個查詢,其中使用了WITH子句來生成結果。如何在休眠狀態下使用條件編寫子句

WITH employee AS (SELECT * FROM Employees) 
SELECT * FROM employee WHERE ID < 20 
UNION ALL 
SELECT * FROM employee WHERE Sex = 'M' 

可以請任何一個讓我知道如何使用標準特別是當與存在於查詢子句寫在休眠此查詢。

+0

我有點困惑,你在這裏試圖完成。目標是獲得一個結果集,其中包含所有「男性」員工以及ID低於20(不管「性別」)的所有員工嗎? –

+0

我隨機拿起查詢我不關心where條件我想知道在條件中寫入WITH語句的語法-zaryn.galadar –

回答

0

首先,你已經大大地過度複雜了你的SQL。這是你的查詢應該是什麼樣子的純SQL:

SELECT * FROM Employees WHERE ID < 20 or Sex = 'M' 

接下來,假設你有一個Hibernate實體(我們稱之爲Employee.java現在),你的HQL等價是:

from Employee e where e.id < 20 or e.sex = 'M' 

要做到這一點與Criteria,你會做到以下幾點:

final Criteria criteria = getSession().createCriteria(Employee.class); 
criteria.add(Restrictions.or(
     Restrictions.lt("id", 20), 
     Restrictions.eq("sex", "M") 
    ) 
); 
criteria.list(); 
+0

但我們正在做查詢調優,我們使用** WITH **子句,所以我隨機選了一個簡單的查詢。我需要使用條件來編寫WITH子句的語法。你可以讓我知道@Dean Clark。 –

+0

簡短的回答是你不能。相反,你應該創建一個數據庫視圖並使用它來代替你的WITH。然後你可以編寫一個新的'Entity'來映射數據庫View併爲你的'Criteria'使用這個類。 –

相關問題