如题;代码如下
public void saveUpdate(Test transientInstance) {
log.debug("saving Test instance");
try {
// getSession().update(transientInstance);//此方法修改不了数据
getSession().merge(transientInstance);//此方法修改不了数据,但添加了一条
// getSession().flush();
log.debug("save successful");
tx.commit();

} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
}

解决方案 »

  1.   

    如果用hibernate的话,
    save, update, delete,等操作一般都用
    getHibernateTemplate.save(entity)/update(entity)/delete(entity);
    没用session来操作
    用的话也是
    Session hibernateSession = getSession();
    Query query = hibernateSession.createQuery("...");/hibernateSession.createSQLQuery("...");
    query.executeUpdate();
    qeury.list();
    什么的
      

  2.   

    因为我现在用的架构是struts+hibernate.用getHibernateTemplate这个的时候,需要继承hibernatedaosupport,而我这里没有用到spring,单独的把包拿过来,可以用吗?
      

  3.   

    struts+hibernate完全可以的,给你个我自己写着玩儿的小东东:
    package dao.impl;import java.util.List;import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.Transaction;import util.SessionFactoryUtil;
    import dao.UserDao;
    import entity.User;public class UserDaoImpl implements UserDao { public boolean deleteUser(User user) {
    // TODO Auto-generated method stub
    Session session = null;
    Transaction transaction = null;
    try {
    session = SessionFactoryUtil.getSession();
    transaction = session.getTransaction();
    transaction.begin();
    session.delete(user);
    transaction.commit();
    return true;
    } catch (Exception e) {
    transaction.rollback();
    e.printStackTrace();
    return false;
    }
    } public User queryUserByUserid(Long userid) {
    // TODO Auto-generated method stub
    Session session = null;
    try {
    session = SessionFactoryUtil.getSession();
    return (User) session.get(User.class, userid);
    } catch (Exception e) {
    e.printStackTrace();
    return null;
    }
    } public User queryUserByUsername(String username) {
    // TODO Auto-generated method stub
    Session session = null;
    Query query = null;
    try {
    session = SessionFactoryUtil.getSession();
    String hql = "from User u where u.username=:username";
    query = session.createQuery(hql);
    return (User) query.setParameter("username", username)
    .uniqueResult();
    } catch (Exception e) {
    e.printStackTrace();
    return null;
    }
    } public List queryUsers() {
    // TODO Auto-generated method stub
    Session session = null;
    Query query = null;
    try {
    session = SessionFactoryUtil.getSession();
    String hql = "from User u";
    query = session.createQuery(hql);
    return query.list();
    } catch (Exception e) {
    e.printStackTrace();
    return null;
    }
    } public Long saveUser(User user) {
    // TODO Auto-generated method stub
    Session session = null;
    Transaction transaction = null;
    try {
    session = SessionFactoryUtil.getSession();
    transaction = session.getTransaction();
    transaction.begin();
    Long result = (Long) session.save(user);
    transaction.commit();
    return result;
    } catch (Exception e) {
    transaction.rollback();
    e.printStackTrace();
    return null;
    }
    } public boolean updateUser(User user) {
    // TODO Auto-generated method stub
    Session session = null;
    Transaction transaction = null;
    try {
    session = SessionFactoryUtil.getSession();
    transaction = session.getTransaction();
    transaction.begin();
    session.update(user);
    transaction.commit();
    return true;
    } catch (Exception e) {
    transaction.rollback();
    e.printStackTrace();
    return false;
    }
    } public List queryUsersByRoleid(Long roleid) {
    // TODO Auto-generated method stub
    Session session = null;
    Query query = null;
    try {
    session = SessionFactoryUtil.getSession();
    String hql = "from User u where u.role.roleid=:roleid";
    query = session.createQuery(hql);
    return query.setParameter("roleid", roleid).list();
    } catch (Exception e) {
    e.printStackTrace();
    return null;
    }
    }}
      

  4.   

    // getSession().update(transientInstance);//此方法修改不了数据 
    getSession().merge(transientInstance);//此方法修改不了数据,但添加了一条 
    根据你所说的,update修改不了数据而merge添加了一条数据很可能就是你的对象的主键有问题,没有对应上来
    在你的Test transientInstance对象中ID没有指明清楚
      

  5.   

    Test 的主键是否已经设置?
    如果设置跟踪看看是否有值,你的情况应该是无值
    不能更新,所以他增加了一条