最近调试的时候,发现 之前写好的 项目出了问题。
就是在执行 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();
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。