Hibernate 中 update 不执行,不报错

Hello_海生 发布于 2014/05/08 09:53
阅读 5K+
收藏 1

最近调试的时候,发现 之前写好的 项目出了问题。

就是在执行  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;
	}

}



求大神指点,卡在这两天了。。。。

加载中
0
Hello_海生
Hello_海生

把  bseDao 的 

this.sessionFactory.OpenSession();

改为

this.sessionFactory.getCurrentSession();


解决了!

0
意志与表象的世界
意志与表象的世界

框架的错误信息可能被日志系统过滤掉了,还有DEBUG跟过没?

Hello_海生
Hello_海生
额,是我觉得配置文件有问题。 麻烦你看一下,谢了。 http://git.oschina.net/hais/Test_Server 就是执行 com.soryin.controller.UserController.java 里面的 update 方法的时候,不执行。
0
人一定要靠自己

引用来自“意志与表象的世界”的评论

框架的错误信息可能被日志系统过滤掉了,还有DEBUG跟过没?

有可能是你配置的问题!
Hello_海生
Hello_海生
额,上传好了。 麻烦看一下,谢了。 http://git.oschina.net/hais/Test_Server 就是执行 com.soryin.controller.UserController.java 里面的 update 方法的时候,不执行。
Hello_海生
Hello_海生
额,事实证明,真的时 配置文件有问题,不知 您能否抽空帮看一下代码稍后传上 osc@git
0
人一定要靠自己

我试试吧!好久么用了

0
人一定要靠自己

找不到错误可别怪我浪费你的时间

Hello_海生
Hello_海生
.大神。。。。求助啊~~
Hello_海生
Hello_海生
恩恩,没事的,我都百度两三天了~~~
0
意志与表象的世界
意志与表象的世界

表结构没变化的话先把 <prop key= "hibernate.hbm2ddl.auto" > update </prop>设成none吧

Hello_海生
Hello_海生
恩,改了一样不行~~
0
意志与表象的世界
意志与表象的世界

update方法上需要事务注解的吧。没有不会开启事务,也就不会提交。

意志与表象的世界
意志与表象的世界
好像不对,默认会对所有方法开启事务
Hello_海生
Hello_海生
尝试过 在 UserServiceImpl.java 上注释,在 Dao的类上注释。在 dao 的update 方法上注释。都没反应!
0
幼年巨龙
幼年巨龙

 
<!-- 创建UserDao实例-->
<bean id= "userDao" class= "com.soryin.dao.impl.UserDaoImpl" ></bean>

<bean id="userService" class="com.soryin.service.impl.UserServiceImpl"></bean> 你把UserServiceImpl注入到UserDaoImpl试下

0
意志与表象的世界
意志与表象的世界

配置里面没有对hibernate实体扫描初始化的信息吧,没有hbm映射文件应该是靠注解初始化这个实体类

Hello_海生
Hello_海生
是的, 是用注解。没用 hbm文件
返回顶部
顶部