7

私はこのようなクラスを持っています:

class Foo {
    String bar
}

String が list にあるすべてのFooオブジェクトの ID を取得しようとしています。いくつかの方法で試しましたが、常に同じエラーが発生します。barbars

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

私が試したことのいくつか:

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

アップデート:

私は分割barsで作っていたので、リストではなく配列でした。IDを収集しようとしたときにのみオブジェクトが正常に返されたので、それは私を失望させました。代わりにtokenizeを使用して作成しましたが、すべて問題ありません。Foo.findAllByBarInList( bars )Foobars

4

1 に答える 1

14

barsリストである限り、それは私にとってはうまくいきます

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

しかし、idフィールドだけが必要な場合、データベースからドメイン クラス インスタンス全体を取得するのは無駄です。今のところフィールドは 1 つだけですが、実際にはもっと大きなテーブルになる可能性があります。したがって、HQL クエリを使用します。

def ids = Foo.executeQuery(
   'select f.id from Foo f where f.bar in (:bars)',
   [bars: bars])
于 2012-07-17T18:57:28.860 に答える