2014-10-30 89 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)");