美文网首页
Hibernate Session常用操作

Hibernate Session常用操作

作者: 伊凡的一天 | 来源:发表于2019-01-11 17:06 被阅读5次

Clear方法

Clear方法会完全清除Hibernate中的缓存。下面是两个例子:

Session session =  HibernateUitl.getSessionFactory().getCurrentSession();
session.beginTransaction();

Teacher t = (Teacher) session.get(Teacher.class, 3);
System.out.println(t.getName());

Teacher t2 = (Teacher) session.get(Teacher.class, 3);
System.out.println(t2.getName());

session.getTransaction().commit();
session.close();

上面虽然有两次查询,但由于第一次查询之后,HIbernate已经将id为3的Teacher缓存起来了,因此最终只会产生一条SQL语句。

再看看下面这个例子:

Session session =  HibernateUitl.getSessionFactory().getCurrentSession();
session.beginTransaction();

Teacher t = (Teacher) session.get(Teacher.class, 3);
System.out.println(t.getName());

session.clear();

Teacher t2 = (Teacher) session.get(Teacher.class, 3);
System.out.println(t2.getName());

session.getTransaction().commit();
session.close();

在第二次查询之前,我们先调用了session.clear()方法,最终产生了两天SQL查询语句。

再看看下面这个例子:

Session session =  HibernateUitl.getSessionFactory().getCurrentSession();
session.beginTransaction();

Employee emp1 = (Employee)session.get(Employee.class, 1);
Employee emp2 = (Employee)session.get(Employee.class, 2);
//emp1 and emp2 are in persistent state.            
            
emp1.setEmpName("NEW SREE");
emp2.setEmpName("NEW KALYAN");
            
session.clear(); //emp1 and emp2 are in detached state.
            
session.getTransaction().commit();
session.close();

运行后发现emp1和emp2并没有被更新,这也是由于我们在commit这个事务前调用了session.clear()方法。

Evict方法

Evict方法和Clear方法类似,但是它作用于单个Entity。

看下面这个例子:

Session session =  HibernateUitl.getSessionFactory().getCurrentSession();
session.beginTransaction();

Employee emp1 = (Employee)session.get(Employee.class, 1);
Employee emp2 = (Employee)session.get(Employee.class, 2);
//emp1 and emp2 are in persistent state.            
            
emp1.setEmpName("NEW SREE");
emp2.setEmpName("NEW KALYAN");
            
session.evict(emp1);  //emp1 is in detached state and emp2 is in persistent state.
            
session.getTransaction().commit();
session.close();

运行后发现emp2被成功更新了,而emp1并未改变。

Flush方法

Flush方法可以强制将持久态的对象从内存同步到数据库,但并不会清除缓存。

看下面的例子:

Session session =  HibernateUitl.getSessionFactory().getCurrentSession();
session.beginTransaction();

Teacher t = (Teacher) session.get(Teacher.class, 3);
t.setName("name1");
t.setName("name2");

session.getTransaction().commit();
session.close();

上面的方法调用了两次setName()方法,但最终只会产生一条SQL语句。

再看下面的例子:

Session session =  HibernateUitl.getSessionFactory().getCurrentSession();
session.beginTransaction();

Teacher t = (Teacher) session.get(Teacher.class, 3);
t.setName("name1");
session.flush();
t.setName("name2");

session.getTransaction().commit();
session.close();

在第二次调用setName()方法前,我们调用了session.flush()方法,因此会产生两天SQL语句,因为flush方法会强行同步内存和数据库中持久态的对象。

注意!flush方法并不意味着数据已经持久化到数据库中了,在没有提交事务前,所有的数据都并没有真正被持久化。

Transaction commit时,实际上隐式地调用了flush方法来同步内存和数据库。

通常,为了控制Hibernate一级缓存的大小,我们会手动调用flush方法和clear方法。下面是一个例子:

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

for ( int i=0; i<100000; i++ ) {
    Customer customer = new Customer(.....);
    session.save(customer);
    if ( i % 20 == 0 ) { //20, same as the JDBC batch size
        //flush a batch of inserts and release memory:
        session.flush();
        session.clear();
    }
}

tx.commit();
session.close();

相关文章

  • Hibernate Session常用操作

    Clear方法 Clear方法会完全清除Hibernate中的缓存。下面是两个例子: 上面虽然有两次查询,但由于第...

  • HIbernate第二次课

    1、Hibernate接口 访问数据库操作的接口:Session、Transaction、Query 配置Hibe...

  • hibernate

    hibernate默认不提交事务 hibernate有2级缓存 session.save() session.sa...

  • Hibernate学习3(Session概述与方法)

    Session概述: Session接口是hibernate向应用程序提供的操作数据库的主要接口 它提供基本的保存...

  • Hibernate

    hibernate简介Hibernatehibernate简介hibernate快速入门session查询api实...

  • 如何通过hibernate调用存储过程

    用hibernate操作数据库,可以通过获取的session值,调用connection()方法获取connect...

  • hibernate的核心类有那些

    hibernate的核心类有那些? Hibernate的核心接口一共有5个,分别为:Session、Session...

  • Hibernate(十五)管理 Session

    一、管理 Session Hibernate 自身提供了三种管理 Session 对象的方法 ①、Session...

  • Hibernate基本用法

    1、Hibernate注解 2、HQL查询 执行HQL查询的步骤:1、获得 Hibernate Session 对...

  • 2018-05-23

    翻译点关于hibernate session的英文材料 Session用于获得与数据库的物理连接,Session对...

网友评论

      本文标题:Hibernate Session常用操作

      本文链接:https://www.haomeiwen.com/subject/adgxdqtx.html