一个典型的事务应该使用下面的形式 在创建完Session对象后即使用beginTransaction()启动事务 从此开始直到commit()之间的代码 都会处于同一个事务中 这两个函数之间所有的数据库代码都会在commit()时一次性提交 在提交时 如果某一句代码执行出现异常 就会回滚这一次事物之间的所有执行代码
- public User getUser(String username) throws HibernateException {
- Session session = null;
- Transaction tx = null;
- User user = null;
- try {
- session = HibernateSessionFactory.currentSession();
- tx = session.beginTransaction();
- Query query = session.createQuery("from User where username=?");
- query.setString(0, username.trim());
- user = (User)query.uniqueResult();
- query = null;
- tx.commit ();
- }catch(HibernateException e){
- throw e;
- }finally{
- if (tx!=null) {
- tx.rollback();
- }
- HibernateSessionFactory.closeSession();
- }
- return user;
- }
如果Session抛出异常 事务必须回滚 Session也会被废弃 在异常发生后 Session的内部状态可能会与数据库失去同步
除了这些 Hibernate的核心类操作 还有
使用Session对数据库的操作
使用Query进行HQL查询
使用Criteria进行条件查询