所以我有域类
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,但无法让它工作。
感谢。
答案 0 :(得分:2)
感谢您的回答。我无法让它工作,但我开始工作的一个解决方案如下,基本上使用正则表达式。
def myAccount = "My Account"
accounts = salesRep.territory.accounts.findAll {
it.accountName ==~ /(?i).*${myAccount}.*/
}
(?i)使匹配忽略大小。
答案 1 :(得分:1)
尝试
def accounts = salesRep.territory.accounts.findAllByAccountNameLike("%${MyAccount}%")
喜欢区分大小写,但如果要忽略大小写,请使用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方法。