2014-10-30 63 views
0

我有兩個字段emailid1Status,emailid2Status。如果emailid1status爲true,那麼我必須將給定的電子郵件與emailId1列進行比較,並與emailid2Status相同。如何在Hibernate中實現這一點。在Hibernate中構建一個case語句

下面我已經嘗試過,但沒有運氣。

from User where user.emailId = email OR user.emailid1 = select case when user.emailid1Status is 0 then null else email OR user.emailid2 = select case when user.emailid2Status is 0 then null else 
    user.emailid2 = email 
    end 

UPDATE 掌握以下SQL查詢正確的結果。任何機構可以告訴我如何將其轉換爲HQL也可以是可能的標準API

select * FROM user_profile a WHERE a.emailId = '[email protected]' or a.emailId1 = (CASE WHEN a.emailId1_status THEN '[email protected]' ELSE '' END) or a.emailId2 = (CASE WHEN a.emailId2_status THEN '[email protected]' ELSE '' END) 
+0

您是否嘗試過與標準是什麼? – Babel 2014-10-30 03:43:49

+0

@looser,請你給我一個代碼。我已經嘗試過,但力氣獲得成功。 – 2014-10-30 03:49:13

回答

1

你不提& emailStatus2都爲真email1Status1的情況。通過你上面的sql,假設NVL2UNION比較合適。

+0

他們既可以是真實的,也可以是任何一個都可以是真的,如果它是真的,我只需要把它放在條件中。 – 2014-10-30 02:22:47

+0

是的,我希望NVL2能夠工作,但是如何在Hibernate中實現這一點。 – 2014-10-30 02:23:56

+0

Hibernate也提供原生SQL,你可以在entityManage API中找到。但是你最好檢查你的數據庫是否支持NVL2。 – 2014-11-02 09:39:20

0

如果你想使用HQL那麼查詢將是:

session.createQuery("FROM User user " 
      + "WHERE user.emailId = '[email protected]' " 
      + "or user.emailId1 = (CASE user.emailId1Status WHEN TRUE THEN '[email protected]' ELSE '' END) " 
      + "or user.emailId2 = (CASE user.emailId2Status WHEN TRUE THEN '[email protected]' ELSE '' END)");