2017-02-07 11 views
0

私はデータベースにSMSまたは電子メールを保存できるgrailsアプリケーションに取り組んでいます。これらのメッセージは暗号化された形式で保存されます。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

ご迷惑をおかけいたします。私がコードを疲れさせたとき、 'method:static security.DESCodec.decryptText()のシグネチャは引数タイプには適用できません:(grails.gorm.DetachedCriteria)values:[[email protected] ] ' – User12111111

+0

あなたは実験が必要です。あなたがオブジェクトを持っているとき、それはおそらく 'Messages.findAll()。findAll {-1 == it.decrypted.indexOf(" xyz ")};'これは後でgrailsで動作するかどうかを確かめます。しかし、すべてのオブジェクトを取得してコレクションをチェックするクエリがキーです。欠点は明らかにすべてのデータを収集することです – Vahid

+0

はい、それが理由です。すべてのデータを収集するとプロセスが遅くなります。 – User12111111

関連する問題