2010-09-04 5 views
3

Je voudrais utiliser un critère hibernate objet comme une sous-requête sur un deuxième critère, comme celui-ci:Critères Hibernate - Exclure groupProperty de sélection

DetachedCriteria latestStatusSubquery = DetachedCriteria.forClass(BatchStatus.class); 
    latestStatusSubquery.setProjection(Projections.projectionList() 
      .add(Projections.max("created"), "latestStatusDate") 
      .add(Projections.groupProperty("batch.id")) 
    ); 

    DetachedCriteria batchCriteria = DetachedCriteria.forClass(BatchStatus.class).createAlias("batch", "batch"); 
    batch.add(Property.forName("created").eq(latestStatusSubquery)); 

Le problème est que l'ajout d'un groupProperty ajouter automatiquement cette propriété à la Sélectionnez la clause sur la requête sous-sélection et je ne trouve aucun moyen d'empêcher cela.

Le résultat, bien sûr, une erreur de DB parce que la sous-requête renvoie trop de valeurs.

Est-ce que quelqu'un sait un moyen de contourner cela?

+0

Et stil pas de réponse? : '( – Cherry

Répondre

1

Essayez comme ci-dessous exemple,

DetachedCriteria subquery = DetachedCriteria.forClass(CustomerCommentsVO.class, "latestComment"); 
      subquery.setProjection(Projections.max("latestComment.commentId")); 
      subquery.add(Expression.eqProperty("latestComment.prospectiveCustomer.prospectiveCustomerId", "comment.prospectiveCustomer.prospectiveCustomerId")); 

objCriteria = objSession.createCriteria(CustomerCommentsVO.class,"comment"); 
      objCriteria.add(Subqueries.propertyEq("comment.commentId", subquery)); 
List lstComments = objCriteria.list(); 
+0

Il n'y a pas de regroupement – mysomic

+0

Mais en réalité, vous comaparant avec la table primaire (les groupes.La table primaire aura certainement 1 clé) et en prenant le maximum, enfin il devient le groupe lui-même. – Jothi