最近调试的时候,发现 之前写好的 项目出了问题。
就是在执行 update、delete 的时候, 不执行,但是也不报错。
配置输出 SQL语句的时候,看不到 SQL语句。数据库中也没有任何变化。
爬文了两天没有结果, 但是发现 如果使用 原生 SQL语句,就可以 更新、删除。如
Query query=this.getSession().createQuery("update from "+c.getName()+" set keyword='123456' where id = '9'"); query.executeUpdate();
再贴上 BaseDao 的实现类
package com.soryin.dao.impl; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.util.List; import javax.annotation.Resource; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import com.soryin.dao.BaseDao; /** * 数据库基本操作实现 * @author Hello_海生 * @date 2014年3月12日 * @param <T> */ @SuppressWarnings("unchecked") public class BaseDaoImpl<T> implements BaseDao<T> { //声明Session工厂 @Resource private SessionFactory sessionFactory; protected Session getSession() { //获取session return this.sessionFactory.openSession(); } protected Class<T> c; //对象类 public BaseDaoImpl() { ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass(); c = (Class<T>) type.getActualTypeArguments()[0]; System.out.println("初始化"+this.c.getName()+"DAO"); } @Override //持久化对象 public Serializable save(T entity) { Serializable uid=0; Transaction tx=this.getSession().beginTransaction(); try{ uid=this.getSession().save(entity); tx.commit(); System.out.println(this.c.getName()+"DAO"+"执行save 成功!"); }catch(Exception e){ System.out.println(this.c.getName()+"DAO"+"执行save 失败!!!!!!!!!!!!!"); tx.rollback(); } return uid; } @Override //删除对象 public boolean delete(Serializable id) { boolean rs= false; Transaction tx=this.getSession().beginTransaction(); try{ Query query=this.getSession().createQuery("delete from "+c.getName()+" where id = '"+id+"'"); query.executeUpdate(); tx.commit(); rs=true; System.out.println(this.c.getName()+"DAO"+"执行 delete("+id+") 成功!"); }catch(Exception e){ System.out.println(this.c.getName()+"DAO"+"执行 delete("+id+") 失败!!!!!!!!!!!!!"); tx.rollback(); } return rs; } @Override //根据ID 查询对象 public T findById(Serializable id) { Object t = this.getSession().get(this.c, id); System.out.println(this.c.getName()+"DAO"+"执行 findById("+id+") 成功!"); return (T) t; } @Override //根据某项参数查询 列表 public List<T> findEntityListByParams(String s,Object params) { Query query=this.getSession().createQuery("from "+c.getName()+" where "+s+" = '"+params+"'"); System.out.println(this.c.getName()+"DAO"+"执行 "+s+"= "+params+" 查询 "); return (List<T>)query.list(); } @Override //查询所有对象 public List<T> findAll() { Query query=this.getSession().createQuery("from "+c.getName()); System.out.println(this.c.getName()+"DAO"+"执行 findAll"); return (List<T>)query.list(); } @Override //查询分页 public List<T> findByPage(int start,int count){ Criteria criteria = this.getSession().createCriteria(c); criteria.setFirstResult(start); criteria.setMaxResults(count); return criteria.list(); } @Override //更新数据 public boolean update(T entity) { boolean rs= false; this.getSession().update(entity); Transaction tx=this.getSession().beginTransaction(); try{ this.getSession().update(entity); tx.commit(); rs=true; System.out.println(this.c.getName()+"DAO"+"执行update 成功!"); }catch(Exception e){ System.out.println(this.c.getName()+"DAO"+"执行update 失败!!!!!!!!!!"); tx.rollback(); } return rs; } }
求大神指点,卡在这两天了。。。。
把 bseDao的
this.sessionFactory.OpenSession();
改为this.sessionFactory.getCurrentSession();
解决了!
框架的错误信息可能被日志系统过滤掉了,还有DEBUG跟过没?
额,是我觉得配置文件有问题。麻烦你看一下,谢了。http://git.oschina.net/hais/Test_Server就是执行com.soryin.controller.UserController.java里面的update方法的时候,不执行。框架的错误信息可能被日志系统过滤掉了,还有DEBUG跟过没?
额,上传好了。麻烦看一下,谢了。http://git.oschina.net/hais/Test_Server就是执行com.soryin.controller.UserController.java里面的update方法的时候,不执行。额,事实证明,真的时配置文件有问题,不知您能否抽空帮看一下代码稍后传上osc @git我试试吧!好久么用了
找不到错误可别怪我浪费你的时间
.大神。。。。求助啊~~恩恩,没事的,我都百度两三天了~~~表结构没变化的话先把 <prop key= "hibernate.hbm2ddl.auto" > update </prop>设成none吧
恩,改了一样不行~~update方法上需要事务注解的吧。没有不会开启事务,也就不会提交。
好像不对,默认会对所有方法开启事务尝试过在UserServiceImpl.java上注释,在Dao的类上注释。在dao的update方法上注释。都没反应!学习下~
<!--创建UserDao实例-->
配置里面没有对hibernate实体扫描初始化的信息吧,没有hbm映射文件应该是靠注解初始化这个实体类
是的,是用注解。没用hbm文件版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。