一、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;
}
}