解决使用jpa的时候set实体类属性自动持久化的问题

在开发SpringMV项目的时候,需要对数据库的部分字段进行加密处理,解密写在find方法里:

    @Override
    @Transactional(readOnly = true)
    public Qydjxx find(String id) {

       Qydjxx  qydjxx =super.find(id);//查询获得数据库信息

        qydjxx =decryptionService.decryptforQydjxx( qydjxx );//解密的方法
        return  qydjxx ;
    }

其中decryptforQydjxx为解密的方法,将解密之后的值赋值给对象,没有进行save和update的操作,数据库的数据却变成了解密的数据。这个是犹豫持久化造成了。要将对象的持久化改成游离状态;

@PersistenceContext
private EntityManager entityManger;

@Override
    public Qydjxxweb decryptforQydjxxweb(Qydjxxweb obj) {
        if (null != obj) {
            // 获得hibernate的session管理对象
            HibernateEntityManager hEntityManager = (HibernateEntityManager)entityManager;
            Session session = hEntityManager.getSession();
            // 将该对象从持久态变为游离态,一定要先变成游离态再赋值,不然报错
            session.evict(obj);

          。。。。。。。。。。。。//省略部分代码
            if (null != colmnamelist && StringUtils.isNotBlank(tableName) && StringUtils.isNotBlank(p_key_value)) {
                if (colmnamelist.size() > 0) {
                    for (String colname : colmnamelist) {
                        colname_value = getFieldValueByFieldName(colname, obj);
                        if (StringUtils.isNotBlank(colname_value)) {
                            colname_en = getFieldValueByFieldName(colname + "_en", obj);
                            if (StringUtils.isNotBlank(colname_en)) {
                                if ("1".equals(colname_en)&&colname_value.length()==172) {// 状态未1,表示加密,加密才能解密
                                    privateKey = repository.findbyColnameAndtablename(tableName, colname, p_key_value);// 获取私钥
                                    if (StringUtils.isNotBlank(privateKey)) {
                                        decrypt_value = decrypt(colname_value, privateKey);
                                        if (StringUtils.isNotBlank(decrypt_value)) {
                                            // 赋值,bean,字段,解密之后的值
                                            if("linkman_cardid".equals(colname)) {
                                                obj.setLinkman_cardid(decrypt_value);
                                                continue;
                                            }else if("linkman_mobile".equals(colname)){
                                                obj.setLinkman_mobile(decrypt_value);
                                                continue;
                                            }else if("linkman_email".equals(colname)){
                                                obj.setLinkman_email(decrypt_value);
                                                continue;
                                            }else if("legal_representative_cardid".equals(colname)){
                                                obj.setLegal_representative_cardid(decrypt_value);
                                                continue;
                                            }
                                        }
                                    }
                                } 
                            }
                        }
                    }
                }
            }
        }
        return obj;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值