0

我正在开发一个 grails 应用程序,它可以在数据库中保存 SMS 或电子邮件。这些消息以加密格式保存。

我正在尝试使用关键字搜索条件从表中获取行。由于这是加密的,我无法找到可以使用关键字搜索的查询。

我已尝试将其添加transients到域类并对其进行解密。这是代码:

在域类中:

 static transients = ['decrypted']

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

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

这没有用。

有人可以告诉我是否有办法通过使用加密列中的关键字进行搜索来获取行?

任何帮助都非常感谢。

4

1 回答 1

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")};
于 2017-02-07T10:46:56.607 回答