説明したように暗号化する方法はありません完全にはアプリケーションに透過的です。あなたが得ることができる最も近いものは、エンティティの外側でそれを透明にすることです。あなたのエンティティクラスで:
@Entity
@SQLInsert(sql="INSERT INTO my_table(my_column, id) VALUES(encrypt(?),?)")
@SQLUpdate(sql="UPDATE my_table SET my_column = encrypt(?) WHERE id = ?")
public class MyEntity {
private String myValue;
....
@Formula("decrypt(my_column)")
public String getValue() {
return myValue;
}
public void setValue(String value) {
myValue = value;
}
@Column (name="my_column")
private String getValueCopy() {
return myValue;
}
private void setValueCopy(String value) {
}
}
value
が派生プロパティとしてマッピングされている、あなたは、クエリでそれを使用することができるはずです。
valueCopy
はプライベートであり、派生プロパティを読み取り専用にするために使用されます。
およびSQLUpdate
は、挿入/更新時に強制的に暗号化するためのブラック・ブードゥー・マジックです。パラメータの順序がであることに注意してください。カスタム挿入/更新を使わずにHibernateがどのような順序でパラメータを生成し、それを複製するかを知る必要があります。
'平文テキストをソートする 'ビットを明確にすることはできますか?つまり、SELECT my_field FROM my_table ORDER BY decrypt(my_field) 'のようなことをしているのでしょうか? – ChssPly76
はい、ただし、SELECT decrypt(my_field)FROM my_table ORDER BY decrypt(my_field)のようになります。とにかくその一例です。また、大文字と小文字を区別しない検索(復号化された値でUPPERを呼び出す)と、LIKE演算子を使用して文字列の部分一致を行う必要があります。これらすべてのことは、データベースが解読を行うことができる必要があります。 –