我正在开发一个grails应用程序,它可以将SMS或电子邮件保存在数据库中。这些邮件以加密格式保存。
我正在尝试使用关键字搜索条件从表中获取行。由于这是加密的,我找不到可以使用关键字搜索的查询。
我尝试将transients
添加到域类并对其进行解密。这是代码:
在域类中:
static transients = ['decrypted']
String getDecrypted() {
return DESCodec.decryptText(message)
}
和
def m2 = Messages.findAll {-1 == it.getDecrypted().indexOf("xyz")};
这不起作用。
有人可以告诉我是否有办法通过使用加密列中的关键字进行搜索来获取行?
任何帮助真的非常感谢。
我可以建议你阅读这个在findBy或listOrderBy方法中使用瞬态属性。
基本上,当您手头有对象时,瞬态对象变得可用。因此,编写 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")};