从数据库中获取数据时解密

时间:2014-12-10 18:25:48

标签: java spring hibernate

我正在使用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吗?

1 个答案:

答案 0 :(得分:1)

您可以毫无疑问地使用ResultTransformer。但是,如果你有很多需要这个的列/实体,那么使用Hibernate Interceptors

在您的示例中使用自定义注释注释name,如下所示

City {
 @CustomAnnotation(decrypt = true) 
 private String name;
..
}

在加载数据时的拦截器内,检查此自定义注释的entities属性。如果设置为true,则解密。

这种方法不具侵入性。

Example

更新: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
   }

})