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

我想做两件事:

1) 搜索带有一些字符串的帐户(例如 '%My Account%'),如下所示:

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

2) 对账户进行排序

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

我知道我可以在域类中添加静态映射 = { sort accountName },但是如果我想使用不同的字段(例如 accountCode)进行排序怎么办。谢谢,我尝试使用 createCriteria,但无法正常工作。

谢谢。

4

2 回答 2

2

感谢你的回答。我无法让它工作,但我必须工作的一个解决方案如下,基本上使用正则表达式。

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 回答