2011-06-28 2 views
0

Comment écrire la requête JDBC suivante dans Hibernate?Code d'hibernation correspondant utilisant les critères

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 

est-ce la bonne approche?

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")); 

Répondre

1

Avez-vous testé? Est-ce que ça marche? Je n'ai pas testé, mais je dirais que vous êtes sur la bonne voie. Si vous rencontrez des problèmes pour le faire fonctionner, alors essayez de casser les choses. Obtenez la requête à exécuter avec la première clause AND uniquement. Lorsque cela fonctionne, essayez d'implémenter la deuxième clause AND (qui vous oblige à implémenter la première condition OR). Je vous suggère de revenir à SO avec une question plus précise si vous ne pouvez pas le faire fonctionner. Bonne chance!

0

Vous pouvez utiliser la requête Hibernate pour cela.

Query query = sessionFactory.openSession() CreateQuery ("de table_date où (START_DT> =: de sdate et END_DT < =: La date de fin) ou (START_DT> =: sdate2 et END_DT < =:. Enddate2); requête. setDate ("sdate", date1); query.setDate ("enddate", date2); query.setDate ("sdate2", date3); query.setDate ("enddate2", date3);

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

+0

Vous pouvez également utiliser le style d'interface fluide '.setParameter(). setParameter()' – zawhtut

Questions connexes