Я не думаю, что есть способ сделать шифрование, как вы его описали, полностью прозрачным для вашего приложения. Самое близкое, что вы можете получить, это сделать его прозрачным вне сущности. В вашем классе сущности:
@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
является приватным и используется для обхода производного свойства только для чтения.
SQLInsert
и SQLUpdate
- это чёрная магия вуду для принудительного шифрования при вставке / обновлении. Обратите внимание, что порядок параметров IS важен, вам нужно выяснить, в каком порядке Hibernate будет генерировать параметры без использования пользовательской вставки / обновления, а затем скопировать его.