在Hibernate中构建一个case语句

时间:2014-10-30 02:13:23

标签: hibernate

我有两个字段emailid1Status,emailid2Status。如果emailid1status为true,那么我必须将给定的电子邮件与emailId1列进行比较,并将其与emailid2Status进行比较。如何在Hibernate中实现这一点。

下面我试过但没有运气。

   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

更新 使用下面的SQL Query获得正确的结果。任何机构都可以告诉我如何将其转换为HQL,或者可以使用Criteria API

select * FROM user_profile a WHERE a.emailId = 'test@gmail.com' or a.emailId1 = (CASE WHEN a.emailId1_status THEN 'test@gmail.com' ELSE '' END) or a.emailId2 = (CASE WHEN a.emailId2_status THEN 'test@gmail.com' ELSE '' END)

2 个答案:

答案 0 :(得分:1)

你没有提到email1Status1&的案例。 emailStatus2都是真的。通过上面的sql,假设NVL2UNION更合适。

答案 1 :(得分:0)

如果您想使用HQL,那么查询将是:

session.createQuery("FROM User user "
          + "WHERE user.emailId = 'test@gmail.com' "
          + "or user.emailId1 = (CASE user.emailId1Status WHEN TRUE THEN 'test@gmail.com' ELSE '' END) "
          + "or user.emailId2 = (CASE user.emailId2Status WHEN TRUE THEN 'test@gmail.com' ELSE '' END)");