使用标准的相应hibernate代码

时间:2011-06-28 06:49:17

标签: java hibernate java-ee

如何在hibernate中编写以下JDBC查询?

Select * from Date_Table where

(START_DT>='2011-05-01 00:00:00.000000' and END_DT<='2011-05-02 00:00:00.000000' )

or

( START_DT<'2011-05-01 00:00:00.000000' and END_DT>='2011-05-01 00:00:00.000000' )

or

( START_DT<'2011-05-02 00:00:00.000000' and END_DT>'2011-05-01 00:00:00.000000' )

order by

START_DT asc

这是正确的方法吗?

Criteria criteria=session.createCriteria(Hours.class);
            Criterion one=Restrictions.ge("startDate", startDate);
                Criterion two=Restrictions.le("endDate", endDate);
                LogicalExpression andOne=Restrictions.and(one, two);
                Criterion one_a=Restrictions.lt("startDate",  startDate);
                Criterion two_a=Restrictions.gt("startDate", startDate);
                LogicalExpression andOne_a=Restrictions.and(one_a, two_a);
                Criterion one_b=Restrictions.lt("endDate",  endDate);
                Criterion two_b=Restrictions.gt("endDate", endDate);
                LogicalExpression andOne_b=Restrictions.and(one_b, two_b);
                LogicalExpression or =Restrictions.or(andOne,andOne_a);
                LogicalExpression or1 =Restrictions.or(or,andOne_b);                
                criteria.add(or1);
                                criteria.addOrder(Order.desc("startDate"));

2 个答案:

答案 0 :(得分:1)

你测试过吗?它有用吗?

我没有测试过,但我会说你走在正确的轨道上。如果你遇到麻烦 让它工作,然后尝试分解。获取仅使用第一个AND子句运行的查询。当它工作时,尝试实现第二个AND子句(它要求您实现第一个OR条件)。

如果你不能让它发挥作用,我建议你回答SO更精确的问题。祝你好运!

答案 1 :(得分:0)

您可以使用hibernate查询。

查询query = sessionFactory.openSession()。createQuery(“来自Date_Table,其中(START_DT&gt; =:sdate和END_DT&lt; =:enddate)或(START_DT&gt; =:sdate2和END_DT&lt; =:enddate2);         query.setDate(“sdate”,date1);         query.setDate(“enddate”,date2); query.setDate(“sdate2”,date3);         query.setDate(“enddate2”,date3);

列出res =(Date_Table)query.list();