SSH用通用dao更新出现的问题

再把SSH框架搭好以后,dao层采用了通用dao来实现,http://1194867672-qq-com.iteye.com/blog/1159918这个是一种实现方法,但是本人亲测,需要在dao的实现类findByHQL方法修改一下,query.setParameter(i, params); 这句话需要把params改成param[i],最后是这样的:

    public List<T> findByHQL(String hql, Object... params) {
        // TODO Auto-generated method stub
        Query query = this.getSession().createQuery(hql);  
        for (int i = 0; params != null && i < params.length; i++){  
            query.setParameter(i, params[i]);
        }
        return query.list();
    }

上面是使用注解实现的,但是我用的是xml配置来实现的,两种方法都可以,前提是需要你把事务配置完成了,在上一篇我已经配置完成了,但是我在保存更新的时候出现了问题,困扰我了好几天,一直没有找到原因,用this.getSession().update(entity);的时候明明数据库里面有原来的数据他就是不更新,而且我也denug过了,当时怀疑是不是Hibernate中的数据不是持久态,所以不能更新,后来发现不对,后来又加上了this.getSession().flush();还是不行,不更新数据,他会插入一条新的数据
最后是我想明白了,原来是因为自己的逻辑有问题,因为我跟本没有获取到当前数据的id,我就在更新了,所以才造成了我的更新失败,不光是更新失败,删除也是失败的,我更加确定了是我的逻辑有问题,所以不更新的时候还是先从自身找找原因吧,当时我试过this.getSession().saveOrUpdate(entity);也添加过this.getSession().flush();真是愚蠢,笨啊
对了,我认为其实通用dao没有必要写一个更新一个保存,他们都可以用saveOrUpdate(entity)来进行实现,有的话就会更新,没有的话就会保存,何必再写两个呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值