2011-02-04 5 views
1

私はGrailsを使っています。 ある時点では、そのIDに基づいてdbから大きなセットのオブジェクトをフェッチする必要があります。 このIDをIDで実行すると、パフォーマンスが非常に悪くなります。 GORMからのオブジェクトのセットを取得する

ids.each{ 
    Myclass.findById(id) 
    ... 
} 

を保存するバッチのために有用 withTransaction閉鎖があることを考えると、それはそれらを格納するのではなく、オブジェクトをフェッチするために、そのような何かをすることは可能でしょうか?

もう一つのアイデアは、のような長いHQLクエリすることができます

"select * from Myclass where (id = 1) OR (id = 2) ... OR (id = n)" 

これはOKソリューションですか?

ありがとうございます!

答えて

2

this questionに記載されているように、HQLは、GORMのfind()メソッドでサポートされている値のグループに基づいて選択するためのより良い構文をサポートしています。 GORM dynamic findersも似た構文をサポートする:あなたの操作が読み取り専用の場合

def myObjs = MyClass.findByIdInList(ids) 

同様に、あなたはHibernateが読み取り専用transationsのために作ることができます最適化の利点を活用しますgetAll()を、使用することができます。

関連する問題