2010-05-03 2 views
0

J'essaie de déterminer comment trouver/récupérer/charger des objets efficacement en termes de.) Minimisant les appels à la base de données et b.) Garder le code comme élégant/aussi simple que possible (ie ne pas écrire hql etc.).Récupérer efficacement des objets avec une ou plusieurs références dans Grails en utilisant GORM

Supposons que vous avez deux objets:

public class Foo { 
    Bar bar 
    String badge 
} 

public class Bar { 
    String name 
} 

Chaque Foo possède un bar et un badge. Supposez également que tous les badges sont uniques dans une barre. Donc, si un Foo a un badge "4565" il n'y a pas d'autres Foos qui ont le même badge # ET la même barre.

Si j'ai un ID de barre, comment puis-je récupérer efficacement le Foo sans sélection préalable de la barre?

Je sais que je peux le faire:

Foo.findByBadgeAndBar("4565", Bar.findById("1")) 

Mais cela semble provoquer une sélection sur la table Bar suivie d'une sélection sur la table Foo. En d'autres termes, je dois produire l'équivalent Grails/Hibernate/GORM des éléments suivants:

select * from foo where badge="4565" and bar_id="1" 

Répondre

5

Vous pouvez utiliser des critères

def c = Foo.createCriteria() 
    def results = c { 
     eq("badge", "4565") 
     eq("bar.id", 1L) 
    } 

Il en résulte une seule instruction select

+0

semble bon, Cela devrait fonctionner. Je vais essayer. merci beaucoup. – bebeastie

Questions connexes