2012-07-17 20 views
6

tengo una clase como esta:Obtener los identificadores de todos los objetos en una lista

class Foo { 
    String bar 
} 

estoy tratando de obtener los identificadores de todos los objetos cuya Foobar cadena está en la lista bars. Lo he probado varias maneras, siempre recibiendo el mismo error:

java.lang.String cannot be cast to java.util.Collection 

Algunas de las cosas que he intentado:

def ids = Foo.findAllByBarInList(bars)*.id 
def ids = Foo.findAllByBarInList(bars).collect{ it.id } 
def ids = Foo.findAllByBarInList(bars).collect{ it -> it?.id } 

ACTUALIZACIÓN:

yo estaba haciendo bars con split por lo era una matriz, no una lista. Me sorprendió porque Foo.findAllByBarInList(bars) devolvió mis objetos Foo muy bien, solo cuando intenté recopilar los identificadores, falló. Ahora hago bars con tokenize y todo está bien.

+0

Agregué la etiqueta groovy a esta pregunta porque tanto el método 'collect' como el operador spread '* .' están basados ​​en groovy. – ubiquibacon

+0

¿Estás seguro de que la lista con la que estás comprobando está configurada correctamente como una lista? Usar 'def ids = Foo.findAllByBarInList (bars) *. Id' funciona para mí. – Kelly

+2

Dejo la etiqueta Groovy desactivada porque Grails usa Groovy, por lo que no es necesario, y es solo el uso de Groovy en Grails, no una pregunta específica de Groovy. Un experto en Groovy que no tenga experiencia con Grails no podría ayudarte. Del mismo modo, puede omitir las etiquetas Java, GORM, Hibernate, Spring, Programming;) –

Respuesta

12

que funciona para mí, siempre y cuando bars es una lista

def bars = ['bar1', 'bar3'] 
def ids = Foo.findAllByBarInList(bars)*.id 

Pero si lo que quieres es el campo id que es una pérdida para tirar de los casos toda la clase de dominio de la base de datos. Por ahora solo existe un campo, pero en la práctica es probable que sea una tabla más grande. Entonces usaría una consulta HQL:

def ids = Foo.executeQuery(
    'select f.id from Foo f where f.bar in (:bars)', 
    [bars: bars]) 
Cuestiones relacionadas