than sort inner greater domain consultas grails gorm

sort - Diferencia entre findAll, getAll y list en Grails



inner join grails (3)

AFAIK, estos son todos idénticos

Book.findAll() Book.getAll() Book.list()

Estos devolverán los mismos resultados

Book.findById(1) Book.get(1)

pero get(id) usará el caché (si está habilitado), por lo que debería preferirse findById(1)

Con Grails hay varias formas de hacer lo mismo.

Encuentra todas las instancias de clase de dominio:

Book.findAll() Book.getAll() Book.list()

Recupera una instancia de la clase de dominio para el ID especificado:

Book.findById(1) Book.get(1)

¿Cuándo usas cada uno? ¿Hay diferencias significativas en el rendimiento?


Otra diferencia entre Domain.findByID (id) y Domain.get (id) es que si está utilizando un filtro de hibernación, debe usar Domain.findById (id). Domain.get (id) puentea el filtro.


getAll es una versión mejorada de get que toma múltiples identificadores y devuelve una List de instancias. El tamaño de la lista será el mismo que el número de ID proporcionados; cualquier error dará como resultado un null en ese espacio. Ver http://grails.org/doc/latest/ref/Domain%20Classes/getAll.html

findAll te permite usar consultas HQL y admite la paginación, pero no están limitadas a las instancias de la clase de llamada, así que utilizo executeQuery en executeQuery lugar. Ver http://grails.org/doc/latest/ref/Domain%20Classes/findAll.html

list encuentra todas las instancias y admite la paginación. Ver http://grails.org/doc/latest/ref/Domain%20Classes/list.html

get recupera una sola instancia por id. Utiliza el caché de instancia , por lo que varias llamadas dentro de la misma sesión de Hibernate darán como resultado como máximo una llamada a la base de datos (por ejemplo, si la instancia está en el caché de segundo nivel y la has habilitado).

findById es un buscador dinámico, como findByName , findByFoo , etc. Como tal, no utiliza el caché de instancia, pero puede almacenarse en caché si tiene el caché de consultas habilitado (generalmente no es una buena idea). get debe ser preferido ya que su almacenamiento en caché es mucho más inteligente; los resultados de las consultas en caché (incluso para una única instancia como esta) se borran pesimísticamente con más frecuencia de lo que cabría esperar, pero la memoria caché de instancias no necesita ser tan pesimista.

El caso de uso único que tendría para findById es como un cheque relacionado con la seguridad, combinado con otra propiedad. Por ejemplo, en lugar de recuperar una instancia de CreditCard usando CreditCard.get(cardId) , encontraría el usuario actualmente conectado y usar CreditCard.findByIdAndUser(cardId, user) . Esto supone que CreditCard tiene una propiedad de User user . De esta forma, ambas propiedades tienen que coincidir, y esto impediría que un pirata informático acceda a la instancia de la tarjeta, ya que la identificación de la tarjeta podría coincidir, pero el usuario no lo haría.