我正在开发一个grails应用程序,它可以在数据库中保存短信或电子邮件。这些消息以加密格式保存。
我正在尝试使用关键字搜索条件从表中获取行。由于这是加密的,我无法找到可以使用关键字搜索的查询。
我尝试将 transient
添加到域类并解密它。这是代码:
在域类中:
static transients = ['decrypted']
String getDecrypted() {
return DESCodec.decryptText(message)
}
和
def m2 = Messages.findAll {-1 == it.getDecrypted().indexOf("xyz")};
这不起作用。
有人可以告诉我是否有办法通过使用加密列中的关键字搜索来获取行?
非常感谢任何帮助。
最佳答案
我建议你读一下这篇文章 Using transient property in findBy or listOrderBy methods .
基本上,当您手头上有一个对象时, transient 对象就变得可用。所以编写 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")};
关于mysql - Grails:如何在加密列中搜索关键字并获取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42085098/