相关推荐:使用Hibernate的session执行任意SQL语句以及整个事务

Session session = getSession(); session.beginTransaction(); Query query = session.createQuery("update Useraccount set meeting=meeting+1,useMeeting=useMeeting-1 where userId=(select userId from Signup whe

 一、session是hibernate中用来对数据库进行增删改查,并且提供了(一级)缓存机制。一个session就代表一次操作单元,在session可以手动维护事务即开启事务和关闭事务,你可以在同一个session中开启和关闭事务很多次。二、在增加、删除和修改的方法,需要session打开事务,在查询时,不需要事务。

——————————代码1:增加、删除和修改的方法—————————

Session session = sessionFactory().openSession();

Transaction tran=session.beginTransaction();

tran.begin();

session.save(object);

tran.commit();

session.flush();

—— ————————

代码2:查询————————————————

Session session = sessionFactory().openSession();

Object obj = session.get(class, id);

session.flush();三、一次请求,用的是同一个session,不管这次请求包含几个事务———————————————例如——————————在service中调incomeDao.save和userDao.save,两次保存不是一个事务,但是用的是同一个session。在incomeDao.save执行时,打开事务,执行完关闭事务。在userDao.save执行时,再打开事务,执行完关闭事务。public class UserServiceImpl{@Transactional(propagation= Propagation.REQUIRED)public void saveALL() {

Income income=new Income ();

income.setUserId(144551);

incomeDao.save(income);

saveUser();}@Transactional(propagation= Propagation.REQUIRES_NEW)public void saveUser() {

User user=new User();

user.setName ("0");

userDao.save(user);}}public class

BaseDaoImpl{public T save(T entity) {

Session session= this.sessionFactory.getCurrentSession();

session.save(entity);

return entity;

} }

相关推荐:Spring、Hibernate 事务流程分析-Session生命周期

Spring、Hibernate 事务流程分析-Session生命周期TransactionInterceptor(Spring事务架构的具体使用场景) -> invoke方法:方法意图大致为获取当前方面的事务属性,然后调用父类TransactionAspectSuppo

快照源:http://my.oschina.net/liuyaqian/blog/667123