getAll
est une version améliorée de get
qui prend plusieurs identifiants et renvoie un List
d'instances. La taille de la liste sera la même que le nombre d'identifiants fournis. null
à cet emplacement. Voir http://grails.org/doc/latest/ref/Domain%20Classes/getAll.html
findAll
vous permet d'utiliser des requêtes HQL et prend en charge la pagination, mais elles ne sont pas limitées aux instances de la classe appelante. executeQuery
à la place. Voir http://grails.org/doc/latest/ref/Domain%20Classes/findAll.html
list
trouve toutes les instances et supporte la pagination. Voir http://grails.org/doc/latest/ref/Domain%20Classes/list.html
get
récupère une seule instance par id. Il utilise le instance Ainsi, plusieurs appels dans la même session Hibernate entraîneront au maximum un appel à la base de données (par exemple, si l'instance se trouve dans le cache de deuxième niveau et que vous l'avez activé).
findById
est un chercheur dynamique, comme findByName
, findByFoo
etc. En tant que tel, il n'utilise pas le cache d'instance, mais peut être mis en cache si vous avez activé la mise en cache des requêtes (ce qui n'est généralement pas une bonne idée). get
est préférable car sa mise en cache est beaucoup plus intelligente ; les résultats des requêtes mises en cache (même pour une seule instance comme celle-ci) sont effacés de manière pessimiste plus souvent que prévu, mais le cache de l'instance n'a pas besoin d'être aussi pessimiste.
Le seul cas d'utilisation que j'aurais pour findById
est un contrôle de sécurité, combiné à une autre propriété. Par exemple, au lieu de récupérer une CreditCard
en utilisant CreditCard.get(cardId)
je trouverais l'utilisateur actuellement connecté et utiliserais CreditCard.findByIdAndUser(cardId, user)
. Cela suppose que CreditCard
a un User user
propriété. Ainsi, les deux propriétés doivent correspondre, ce qui empêcherait un pirate d'accéder à l'instance de la carte puisque l'identifiant de la carte pourrait correspondre, mais pas l'utilisateur.