Запрос и упорядочение результатов базы данных в граалях с использованием переходных полей - PullRequest
3 голосов
/ 12 марта 2010

Я пытаюсь отобразить выгружаемые данные из объекта домена Grails. Например: У меня есть объект домена Employee со свойствами firstName и lastName, которые являются временными, и при вызове их методов установки / получения они шифруют / дешифруют данные. Данные сохраняются в базе данных в зашифрованном двоичном формате, поэтому не сортируются по этим полям. И опять же, не сортируемый переходными, как отмечено в: 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)       
}

}

1 Ответ

2 голосов
/ 12 марта 2010

Это не может работать из-за того, как выполняются критерии GORM / гибернации. Эти директивы порядка переведены на SQL и могут работать только с непереходными полями, поскольку это происходит на уровне базы данных.

Ваш выбор:

  1. Загрузить результаты запроса в память и самостоятельно выполнить сортировку и разбивку на страницы по незашифрованным значениям.
  2. Используйте возможности шифрования вашей базы данных и пользовательский запрос (например, "select * from employee order by AES_DECRYPT(lastName, key)"). Осторожно, это создаст дополнительную нагрузку на вашу базу данных.
  3. Храните что-то в незашифрованном виде, которое можно использовать для сортировки. Пример: первые несколько букв lastName. Однако это приводит к утечке части информации, которую вы пытаетесь сохранить в безопасности.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...