如题;代码如下
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;
}
}
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;
}
}
save, update, delete,等操作一般都用
getHibernateTemplate.save(entity)/update(entity)/delete(entity);
没用session来操作
用的话也是
Session hibernateSession = getSession();
Query query = hibernateSession.createQuery("...");/hibernateSession.createSQLQuery("...");
query.executeUpdate();
qeury.list();
什么的
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;
}
}}
getSession().merge(transientInstance);//此方法修改不了数据,但添加了一条
根据你所说的,update修改不了数据而merge添加了一条数据很可能就是你的对象的主键有问题,没有对应上来
在你的Test transientInstance对象中ID没有指明清楚
如果设置跟踪看看是否有值,你的情况应该是无值
不能更新,所以他增加了一条