0

だから私はドメインクラスを持っています

class SalesRep {
   SalesTerritory territory
}
class SalesTerritory {
   hasMany=[accounts: AccountCustomer]
   String territoryCode
}

class AccountCustomer {
   String accountName
   String accountCode
   belongsTo = SalesTerritory
   hasMany=[salesTerritories: SalesTerritory]
}

コントローラでは、次の方法でアカウントを取得できます。

def salesRep = SalesRep.findBy... // 
def accounts = salesRep.territory.accounts

私は2つのことをしたいと思います:

1)次のような文字列(例:'%My Account%')でアカウントを検索します。

def accounts = salesRep.territory.accounts.find("accountName like '%My Account%'")

2)アカウントを並べ替える

def accounts = salesRep.territory.accounts.sort("accountName")

ドメインクラスに静的マッピング={sortaccountName}を追加できることはわかっていますが、accountCodeなどの別のフィールドを使用して並べ替える場合はどうでしょうか。おかげで、createCriteriaを使用してみましたが、機能しませんでした。

ありがとう。

4

2 に答える 2

2

答えてくれてありがとう。それを機能させることはできませんでしたが、基本的に正規表現を使用して、機能するようになった1つの解決策を以下に示します。

def myAccount = "My Account"
accounts = salesRep.territory.accounts.findAll {
   it.accountName ==~ /(?i).*${myAccount}.*/
}

(?i)は、一致を無視する場合を作成します。

于 2012-06-19T22:17:51.297 に答える
1

試す

def accounts = salesRep.territory.accounts.findAllByAccountNameLike("%${MyAccount}%")

Likeでは大文字と小文字が区別されますが、大文字と小文字を区別しない場合は、iLikeを使用してください。

並べ替えには、

def accounts = salesRep.territory.accounts.list(sort:'accountName', order:'asc')

静的マッピングを介してドメインクラスで並べ替えを定義することもできます

static mapping = {
     sort accountName:"asc"
}  

しかし、自分のやり方でソートしたい場合は、コンパレーターを追加し、クラスがComparableを実装していることを確認する必要があると思います。

class YourClassName implements Comparable{

 String accountName
 ...


 @Override
 public int compareTo(Object o) {
     if (o == null || this == null) {
         return 0;
     } else {
         return value.compareTo(o.value)
     }
 }
}

次に、.sortを呼び出すと、ドメインのcompareToメソッドが使用されます。

于 2012-06-19T20:33:32.377 に答える