我正在使用 Hibernate 开发 Spring MVC 项目。我有一个表,其中一些列具有加密数据。每当我想要获取数据(唯一结果或列表)时,我必须循环数据并执行解密逻辑,然后再次设置到模型/实体中。
目前我们正在做这样的事情:
query = session.createSQLQuery("SELECT C.* FROM CITY C");
query.addEntity(City.class);
List<City> list = query.list();
for (City city : list)
{
city.setName(AESHelper.decrypt(city.getName(), "key"));
}
我们可以在 Hibernate 中使用一些东西,当 Hibernate 将数据转换为实体时,我们可以应用这样的逻辑,我们可以使用 ResultTransformer
来实现这一点吗?
最佳答案
毫无疑问,您可以使用 ResultTransformer。但是,如果您有很多需要此的列/实体,则使用 Hibernate Interceptors 。
在您的示例中,使用如下所示的自定义注释来注释 name
City {
@CustomAnnotation(decrypt = true)
private String name;
..
}
在拦截器中,当加载数据时,检查此自定义注释的实体属性。如果它设置为 true 则解密它。
这种方法是非侵入性的。
更新:结果转换器
sess.createSQLQuery("SELECT name from City where name like 'xxyy'")
.setResultTransformer(new ResultTransformer(){
Object transformTuple(Object[] tuple, String[] aliases){
// assign each tuple value to your object and return
}
})
关于java - 从数据库获取数据时解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27408211/