文章目录
@Test
public void Test() {
Session session = null;
Transaction transaction = null;
try {
// 创建session
session = HibernateUntil.getSession();
// 开始事务
transaction = session.beginTransaction();
//查询id=2 的数据,这个是session的第一次查询,那么会发出sql语句
Student student1=session.get(Student.class, 2);
//再次使用同一个Session查询id=2的对象,由于前面已经查询过一次,因此这里不需要发出sql语句
Student student2=session.get(Student.class,2);
transaction.commit();
} catch (Exception exception) {
transaction.rollback(); // 事务回滚
} finally {
if (session!=null) {
session.close();
}
}
}
@Test
public void test1(){
Session session1 = null;
Session session2 = null;
Transaction transaction = null;
try {
// 创建session
session1=HibernateUntil.getSession(); //获取session1
session2=HibernateUntil.getSession();
// 开始事务
transaction = session1.beginTransaction();
transaction = session2.beginTransaction();
//使用session1查询id=2的对象,这个对象会在session1的缓存区缓存
Student s1=session1.get(Student.class, 2);
//使用Session2查询id=2的对象,可以看到这还是会发出sql语句,因为在session2的缓存区没有这个对象
Student s2=session2.get(Student.class, 2);
transaction.commit();
} catch (Exception exception) {
transaction.rollback(); // 事务回滚
} finally {
if (session1!=null) {
session1.close();
}
}
}
session.evit(obj)
将obj对象从一级缓存中清除public void Test2() {
Session session = null;
Transaction transaction = null;
try {
// 创建session
session = HibernateUntil.getSession();
// 开始事务
transaction = session.beginTransaction();
//查询id=2 的数据,这个是session的第一次查询,那么会发出sql语句
Student student1=session.get(Student.class, 2);
//清楚一级缓存中的student1对象
session.evict(student1);
//再次使用同一个Session查询id=2的对象,由于前面已经清除了这个对象,因此这里还是会发出sql语句
Student student2=session.get(Student.class,2);
transaction.commit();
} catch (Exception exception) {
transaction.rollback(); // 事务回滚
} finally {
if (session!=null) {
session.close();
}
}
}
session.clear()
清除一级缓存中的所有对象session.close()
关闭session,释放缓存空间