2017-10-03 2 views
1

Je veux écrire la requête suivante dans HQL:comment combiner des colonnes de plusieurs sous-requêtes en veille prolongée

select v1.maxx, v2.maxx from 
    (select max(id) maxx from mytable where my_column is not null) v1, 
    (select max(id) maxx from mytable where my_column is null) v2; 

J'ai la suite à ce jour:

DetachedCriteria d1=DetachedCriteria.forClass(MyTable.class, "d1") 
     .setProjection(Projections.max("id")) 
     .add(Property.forName("myColumn").isNull(); 

    DetachedCriteria d2=DetachedCriteria.forClass(MyTable.class, "d2") 
     .setProjection(Projections.max("id")) 
     .add(Property.forName("myColumn").isNotNull(); 

Mais je vais avoir difficile de les combiner en un seul objet critère.

Répondre

0

could't trouver comment inclure plusieurs sous-requêtes dans SELECT. J'ai donc réécrit la requête comme suit et cela fonctionne avec HQL:

select max(k.id), max(l.id) from myTable k, myTable l 
    where k.myColumn is not null and l.myColumn is null; 
0

Voici mon approche de combiner vos deux sous-requêtes:

Criteria criteria = Criteria.forClass(MyTable.class); 
    criteria.add(Subqueries.propertyEq("v1.maxx", d2)); 
    criteria.add(Subqueries.propertyEq("v2.maxx", d1));