2011-11-17 1 views
0

Résolu: Changer le type de jointure à INNER_JOINGrails Critères Hibernate: Obtenez l'entrée de table originial

J'essaie d'obtenir la table d'entrée originale d'une classe de domaine après l'exécution d'un critère de mise en veille prolongée.

Par exemple:
La classe de domaine A a une association hasMany à la classe de domaine B.
L'entité de A avec l'ID 1, a deux entités de B avec les ids 11 et 12.

J'exécution les critères suivants:

Criteria criteria = session.createCriteria(A.class) 
criteria.createAlias("Bs","B",CriteriaSpecification.LEFT_JOIN) 
criteria.add(Restrictions.like("B.property", "%"+something+"%") 

def list=criteria.list().unique() 

maintenant, j'ai un jeu de résultats avec toutes les entités de a, qui a obtenu une entité B, qui fullfilles les critères.

Mais les résultats de A sont différents des entités originales de A, en ce qui concerne la relation hasMany avec B. Les entités de B, qui ne remplissent pas les critères sont manquantes.

Par exemple: L'entité A avec id 1 seulement a obtenu le entitie B avec id 11.

Même si j'exécute un

def newA=A.findById(list[0]) 

le newA seulement obtenu l'entité B avec l'ID 11. Et le 12 est manquant.

Des idées?

Répondre

0

Voir: http://adhockery.blogspot.com/2009/06/querying-by-association-redux.html et http://jira.grails.org/browse/GRAILS-7087

Essayez ceci:

def list = A.withCriteria { 
    createAlias("bs", "aliasedBs") 
    like("aliasedBs.property", "%something") 
} 
list.bs // will contain ALL items of the association, independent of the query 
+0

Je garde toujours avec flush: true. Si j'exécute def newA = A.findByName (list [0] .name) le résultat obtient toutes les instances associées. – fabschu

+0

Avez-vous essayé d'exécuter la requête à partir de la réponse? – Chris

+0

Oui, avec le même effet ... – fabschu