我正在使用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
吗?
答案 0 :(得分:1)
您可以毫无疑问地使用ResultTransformer。但是,如果你有很多需要这个的列/实体,那么使用Hibernate Interceptors。
在您的示例中使用自定义注释注释name
,如下所示
City {
@CustomAnnotation(decrypt = true)
private String name;
..
}
在加载数据时的拦截器内,检查此自定义注释的entities属性。如果设置为true,则解密。
这种方法不具侵入性。
更新:ResultTransformer
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
}
})