2017-02-07 10 views
0

Я работаю над приложением grails, где он может сохранять SMS или электронную почту в базе данных. Эти сообщения сохраняются в зашифрованном формате.Grails: как искать ключевое слово в зашифрованном столбце и получать строки

Я пытаюсь получить строки из таблицы, используя критерии поиска по ключевым словам. Поскольку это зашифровано, я не могу найти запрос, который может искать с ключевым словом.

Я попытался добавить transients в класс домена и расшифровать его. Вот код:

в классе домена:

static transients = ['decrypted'] 

String getDecrypted() { 
    return DESCodec.decryptText(message) 
} 

и

def m2 = Messages.findAll {-1 == it.getDecrypted().indexOf("xyz")}; 

, который не работал.

Может ли кто-нибудь сказать мне, есть ли способ получить строки, используя ключевое слово в зашифрованном столбце?

Любая помощь действительно ценится.

ответ

0

Могу ли я предложить вам прочитать это Using transient property in findBy or listOrderBy methods.

В основном переходный объект становится доступным, когда у вас есть объект в руке. Поэтому написать hql/hibernate-запросы не будут работать. Вы, возможно, лучше удачи делать что-то вроде:

def m2 = Messages.findAll {-1 == DESCodec.decryptText(it.message).contains("xyz")}; 

авторизованы, выше точно, что вам нужно, чтобы играть вокруг

Вот то, что вы пытаетесь сделать

def listing = Messages.executeQuery("from Messages" ,[:],[max:-1]) 
def found = listing.findAll {-1 == it.decrypted.contains("xyz")}; 

или вручную:

def listing = Messages.executeQuery("select new map(id as id, message as message) from Messages" ,[:],[max:-1]) 
    def found = listing.findAll {-1 == DESCodec.decryptText(it.message).contains("xyz")}; 
+0

благодарю вас за ваше заблуждение. Когда я устал от кода, я возвращаю сообщение об ошибке «Нет сигнатуры метода: статическая безопасность.DESCodec.decryptText() применима для типов аргументов: (grails.gorm.DetachedCriteria) значения: [[email protected] ] ' – User12111111

+0

вам нужно будет поэкспериментировать. когда у вас есть объекты, у них есть дешифрованное значение, поэтому, возможно, 'Messages.findAll(). findAll {-1 == it.decrypted.indexOf (" xyz ")};' double findAll unsure, если это работает в более поздних grails. Но ключом является запрос, чтобы получить все объекты, чтобы проверить коллекцию. недостаток, очевидно, должен собрать все данные – Vahid

+0

да, вот в чем причина. Сбор всех данных приведет к замедлению процесса. – User12111111

 Смежные вопросы

  • Нет связанных вопросов^_^