2012-02-24 8 views
3

人は、grails GORMの問題に直面しています。私のアプリケーションは完全にDomainClass.list()メソッドに依存しています。 GSPを使用していますが、今はオブジェクトの一覧表示に特別な動作が必要です。より具体的には、これらのリスト(すべて)を1つの属性でフィルタリングする必要があります。GORM(Grails)のDomainClass.list()をオーバーライドする方法

問題は、これらのメソッド呼び出しの外観をすべて変更しないことを望んでいるので、デフォルトのlist()メソッドの動作をカスタマイズする方法はありますか?私はそれがそうするように機能するが、終了フィルタを追加する必要があります。

+1

解決策を見つけましたか?私はまったく同じ問題を抱えています。ユーザーにDELETEDステータスを追加しました。新しいメソッドを呼び出すためにすべてのコードを変更する必要はありません。削除したユーザーを返さないようにしてください。 – Eduard

+0

@Eduard同じ問題がここにあります。あなたは解決策を見つけましたか? –

答えて

3

多分、あなたはhibernate filter pluginを使うことができます(here参照)。これは、プロパティに基づいて(list()を含む)すべての検索メソッドをフィルタリングすることができます:

static hibernateFilters = { 
    enabledFilter(condition: 'deleted=0', default: true) 
} 
+1

FYI:hibernateフィルタプラグインをテストしましたが、Grails 2.0では動作しないようです。また、 'get()'コールでは動作しません –

+1

私にとってはうまくいくかどうか分かりませんが、私の問題はちょっと複雑です。フィルタリングはドメインクラスの属性には直接的ではなく、複雑な関係にあり、実際に問題を解決するかどうかはプラグインのドキュメントでは分かりません。しかし、このプラグインは簡単な問題を解決することができます。 – JRafaelM

0

あなたはnames queriesを使用して考えがありますか?

class DomainClass { 
    // ... class members 

    static namedQueries = { 
     myList { params-> 
      // put your complicated logic here 
     } 
    } 
} 

次に、あなただけのDomainClass.myList.list()DomainClass.list()にあなたの呼び出しを置き換えることができます:あなたは、常にこのような何かを行うことができます。

+1

実際に私の問題は、これらのDomainClass.list()呼び出しをすべて置き換えたくないということです。私はそれが私の問題を解決することができるかどうかをチェックするためにgrail metaprogrammingを勉強しています.... – JRafaelM

+0

名前付きクエリーをデフォルトにすることは可能ですか? –

関連する問題