2016-04-27 78 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'使用这个类。 –

相关问题