如何通过字母数字(字符串)属性 更正排序域 class?

How to correct sort domain class by an alphanumeric (String) property?

当我按字母数字 属性 对域 Class 进行排序时,当值以数字开头时,排序顺序不是预期的。示例:

class MyDomainClass {
  String descr
}

MyDomainClass.createCriteria().list() {
  order("descr", "asc")
}.each { it ->
  println it.descr
}

如果 table 包含这 3 个值:

打印结果为:

但我想要的是(同数据库查询结果):

有没有我可以定义它的配置?

我意识到问题的发生是由于 NLS_SORT parameter on Oracle DB being changed to WEST_EUROPEAN when my application sets the locale to pt_BR (because this is the default sorting for this locale according Oracle's documentation). So I realized I can define a custom sorter using NLSSORT 必要时的功能:

select ret
  from ( select 'AAA' as ret from dual
          union
         select '111' as ret from dual
          union
         select 'BBB' as ret from dual)
 ORDER BY NLSSORT(ret, 'NLS_SORT = BINARY');

在圣杯中:

println ' --- With WEST_EUROPEAN sort ---'
MyDomain.executeQuery("SELECT m FROM MyDomain as m ORDER BY NLSSORT(descr, 'NLS_SORT = WEST_EUROPEAN')").each {
    println it.descr
}

println ' -- With BINARY sort ---'
MyDomain.executeQuery("SELECT m FROM MyDomain as m ORDER BY NLSSORT(descr, 'NLS_SORT = BINARY')").each {
  println it.descr
}

输出:

--- With WEST_EUROPEAN sort ---  
AAA  
BBB  
111  
--- With BINARY sort ---  
111  
AAA  
BBB