Соответствующий код гибернации с использованием критериев - PullRequest
0 голосов
/ 28 июня 2011

Как написать следующий запрос 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 ]

1 голос
/ 28 июня 2011

Вы проверяли это?Это работает?

Я не проверял это, но я бы сказал, что вы на правильном пути.Если у вас возникли проблемы с тем, чтобы заставить его работать, попробуйте все разбить.Получите запрос для выполнения только с первым предложением AND.Когда это сработает, попробуйте реализовать второе предложение AND (которое требует от вас выполнения первого условия OR).

Я предлагаю вам вернуться к SO с более точным вопросом, если вы не можете заставить его работать.Удачи!

0 голосов
/ 28 июня 2011

Вы можете использовать запрос гибернации для этого.

Запрос запроса = sessionFactory.openSession (). CreateQuery ("из Date_Table где (START_DT> =: sdate и END_DT <=: enddate) или (START_DT> =: sdate2 и END_DT <=: enddate2); query.setDate ("sdate", date1); query.setDate ("enddate", date2); query.setDate ("sdate2", date3); query.setDate ("enddate2", date3); </p>

List res = (Date_Table) query.list ();

...