更改第一种写法,
public void updateUserpwd(String userid, String userpwd) throws Exception {
String hql = "UPDATE User SET userpwd=? WHERE userid=?";
Query q = super.getSession().createQuery(hql);
q.setString(0, userpwd);
q.setString(1, userid);
q.executeUpdate();
}这样写行不行, session 不用关吗??,用不用COMMIT;
第二种写法,
public void updateSate(Long mid) {
String hql = "UPDATE Messagetab SET state=2 WHERE mid=:mid";
Session session = this.getHibernateTemplate().getSessionFactory().openSession();
Transaction tx = null;
try{
tx = session.beginTransaction();
Query q = session.createQuery(hql);
q.setLong("mid", mid);
q.executeUpdate();
tx.commit();
tx = null;
}catch(Exception e){
tx.rollback();
e.printStackTrace();
}finally{
if(tx != null){
tx = null;
}
session.close();
}


}
这两种写法有什么没同,Session session = this.getHibernateTemplate().getSessionFactory().openSession();是得到一个新的session 吗?

解决方案 »

  1.   

    应该看session是否还未在
    如果在就继续拿来用
    不在的话就重新new出来一个
      

  2.   

    对于第一种写法:
    这种写法当然没问题,当然要注意一个良好的习惯,session使用之后最好关闭。因为session作为二级缓存,它的开启与关闭是不会影响性能的。至于要不要commit,与你的配置有关,即是否自动提交。对于第二种写法:
    这种写法考虑到事务安全性。
    Session session = this.getHibernateTemplate().getSessionFactory().openSession();
    是不是得到一个新的session,你可以去看下源码就知道了。
      

  3.   

    第一种写法:
    session用不用关根据业务需要,但从db安全操作角度来说,数据库操作一定要遵循【开启事务-db操作-关闭事务(或回滚)】的操作流程,否则容易出错;第二种写法:
    HibernateTemplate提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,运用起来比较方便。个人意见:像lz给出的简单update语句,应该不需要写sql如此麻烦,直接用get方法获取hibernate持久bean,修改相应的属性值,然后update方法就OK了。
      

  4.   

    to KAKUKYOWU
     
    (恐龙杀手) 
    不需要写sql如此麻烦,直接用get方法获取hibernate持久bean,修改相应的属性值,然后update方法就OK了。
    上边的修改需要怎么写,???
      

  5.   

    1.开启事务;
    2.hibernate的get方法获取持久bean(比如持久bean叫User,主键叫userid)
      User user = super.getSession().get(User.class,userid);
      user.setUserpwd("11111");
      super.getSession().save(user);
    3.关闭事务。