您的位置:首页 > 其它

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

2017-03-20 22:32 134 查看
再把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)来进行实现,有的话就会更新,没有的话就会保存,何必再写两个呢?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ssh 框架 getSession
相关文章推荐