public void testSave(){
Session session = HibernateUtil.getSessionFactory().openSession();
User user = new User();
session.save(user);//此时输出sql语句,而且数据自动提交,都无需开启实务,而执行update,delete操作却不行
session.close();
}求大虾解救我!
Session session = HibernateUtil.getSessionFactory().openSession();
User user = new User();
session.save(user);//此时输出sql语句,而且数据自动提交,都无需开启实务,而执行update,delete操作却不行
session.close();
}求大虾解救我!
Session session = HibernateUtil.getSessionFactory().openSession();
User user = new User(); session.save(user);//你这里updete delete的时候 因为你是new 了一个 user对象
但是 对于hibernate 来说 session.update(user)/delete(user), user这个对象不明确
所以会失败
如果你在前面加一个 user.session.get/load(User.class,id); 那么应该可以 session.close();
}
非查询操作都是需要开启事务的,还有不是说直接new一个对象就是可以随便update跟delete的
好好看看Hibernate去
当你new 一个对象时,这个对象是瞬时态的,这时调用save时,可以insert 一条新的..
但你用update或delete 时,这时只能操作持久态的对象..所以你可以先用一个ID,get/load它,然后就可以update/delete 了...
1.save保存:
User user=new User();
session.save(user);
2.update/delete更新或者删除(数据库中必要有对应的ID):
session.update(session.load(User.class,id));
session.delete(session.load(User.class,id));
如果说要new 一个User对象,必须保证User的Id对应数据库里的。
User user=new User();
user.setId(数据库中对应的id);//设置User的Id
session.update(user);此时才会成功
不是不明白,是你没把问题说清楚!他们说的是对的,hibernate在3种各自的状态下操作是有限制的!
实际上你的保存还是没有提交。
你new 出来的一个实体 hibernate帮你插入数据库(自增长id)。你update 和delete 都需要id才能操作。更新和删除是需要id的。你更新谁?删除谁?有id hibernate才会知道的。然后才会帮你执行操作。
有错误方便才方便准确推理