我正在尝试从grails域对象中显示分页数据。例如: 我有一个域对象Employee,其属性firstName和lastName是瞬态的,并且当调用它们的setter / getter方法时,它们会加密/解密数据。数据以加密的二进制格式保存在数据库中,因此不能按这些字段排序。而且,再次,也不能被瞬态分类,如下所述: http://www.grails.org/GSP+Tag+-+sortableColumn。
所以现在我正试图以类似于:
的方式找到一种使用瞬变的方法Employee.withCriteria( max: 10, offset: 30 ){
order 'lastName', 'asc'
order 'firstName', 'asc'
}
课程是:
class Employee {
byte[] encryptedFirstName
byte[] encryptedLastName
static transients = [
'firstName',
'lastName'
]
String getFirstName(){
decrypt("encryptedFirstName")
}
void setFirstName(String item){
encrypt("encryptedFirstName",item)
}
String getLastName(){
decrypt("encryptedLastName")
}
void setLastName(String item){
encrypt("encryptedLastName",item)
}
}
答案 0 :(得分:2)
由于执行GORM / hibernate标准的方式,这不起作用。这些订单指令被转换为SQL,并且只能在非瞬态字段上运行,因为它发生在数据库层。
您的选择是:
select * from employee order by AES_DECRYPT(lastName, key)
”)。请注意,这会给您的数据库带来很多额外负担。