`
fantaxy025025
  • 浏览: 1313315 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

session.flash() in Hibernate

阅读更多

Hibernate method flush flush() commit commit() clear clear()

 

Words explaination:

Flush

    To clean, rinse, or empty with a rapid flow of a liquid, especially water

 

1. check the hibernate API

 

Session (Hibernate API Documentation)<!-- Generated by javadoc (build 1.4.2_09) on Mon Mar 20 14:19:10 CST 2006 --> <script type="text/javascript"><!-- function windowTitle() { parent.document.title="Session (Hibernate API Documentation)"; } // --></script>

public void flush
() throws HibernateException


Force the Session to flush. Must be called at the end of a unit of work, before commiting the transaction and closing the session (Transaction.commit() calls this method). Flushing is the process of synchronising the underlying persistent store with persistable state held in memory.

 

Throws:
HibernateException

 

    What this method do:Flushing is the process of synchronising the underlying persistent store with persistable state held in memory.

    When to call the method:Must be called at the end of a unit of work, before commiting the transaction and closing the session.

 

2.

http://www.99inf.net/SoftwareDev/Java/53962.htm

 

session save 方法为例来看一个简单、完整的事务流程,如下是代码片段:

…………………………………………………………………………

Session session = sessionFactory .openSession();

Transaction tx = session.beginTransaction();

session.save(customer);// 之前已实例化好了的一个对象

tx.commit();

…………………………………………………………………………

示例很简单,就是向 DB 中插入一条顾客信息,这是一个最简单的 DB 事务。

在这个简单的过程中, Hibernate 为我们做了一些什么事情呢?为了更好的观察,我们将 Hibernate show_sql 属性设置为 true ,然后运行我们的程序,控制台打印出如下信息:

Hibernate: select max(ID) from CUSTOMER

Hibernate: insert into CUSTOMER (NAME, EMAIL, PASSWORD, PHONE, ADDRESS, SEX, IS_MARRIED, description, BIRTHDAY, REGISTERED_TIME, ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

这里也许看不出什么端倪来,现在在 session.save(customer) 后面加一行代码,输出这个 customer OID System.out.println(customer.getId()) ,再次运行程序,控制台输出为:

Hibernate: select max(ID) from CUSTOMER

22

Hibernate: insert into CUSTOMER (NAME, EMAIL, PASSWORD, PHONE, ADDRESS, SEX, IS_MARRIED, description, BIRTHDAY, REGISTERED_TIME, ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

OID insert 语句之前输出,这可以说明两个问题:

1.insert 语句并不是在执行 save 的时候发送给 DB 的;

2.insert 语句是在执行 commit 的时候发送给 DB 的。结合前面我们所说过的:执行 save 的时候, Hibernate 会首先把对象放入缓存,然后计划一条 insert 语句。一个基本的插入流程就出来了:

1.   判断所要保存的实例是否已处于持久化状态,如果不是,则将其置入缓存;

2.   根据所要保存的实例计划一条 insert sql 语句,注意只是计划,并不执行;

3.   事务提交时执行之前所计划的 insert 语句;

后台还打印出了 select max(ID) from CUSTOMER ,这主要是为了给 customer 赋予一个 OID ,因为一般情况下临时对象的 OID NULL

接着我们做两个测试:

1.   tx.commit(); 注释掉,此时控制台没有打印出 insert 语句;

2.   tx.commit() 换成 session.flush ,此时控制太打印出了 insert 语句,但是DB 中并没有添加新的记录;

通过查阅 Hibernate API 可以知道

1. flush 方法的主要作用就是清理缓存,强制数据库与 Hibernate 缓存同步,以保证数据的一致性。

2. 同时其主要动作就是向数据库发送一系列的 sql 语句,并执行这些 sql 语句,但是不会向数据库提交。

commit 方法则会首先调用 flush 方法,然后提交事务。这就是为什么我们仅仅调用 flush 的时候记录并未插入到数据库中的原因,因为只有提交了事务,对数据库所做的更新才会被保存下来。因为 commit 方法隐式的调用了 flush ,所以一般我们都不会显示的调用 flush 方法。

分享到:
评论

相关推荐

    hibernate3.zip 包含hibernate3.jar

    2. **Session**:在Hibernate中,`Session`对象是数据库会话的代表,负责在应用程序和数据库之间建立连接。它可以执行查询、保存、更新和删除对象,同时提供事务管理和缓存功能。 3. **SessionFactory**:`...

    hibernate的session.flush

    `Session.flush()`方法是一个关键的操作,它强制Hibernate将内存中的对象状态同步到数据库,确保数据的一致性。这篇博客深入探讨了`Session.flush()`的工作原理和应用场景。 `Session`在Hibernate中主要有以下职责...

    JavaEE技术-自主学习.zip_hibernate_hibernate session _javaee映射.xml

    User fetchedUser = (User) session.get(User.class, 1L); // 删除 session.delete(fetchedUser); session.close(); sessionFactory.close(); ``` 在`JavaBeanTest71`这个文件中,可能包含了对上述概念的实践代码...

    Hibernate In Action(Java.Persistence.with.Hibernate)源码

    《Hibernate In Action(Java.Persistence.with.Hibernate)》是一本深入探讨Hibernate框架的书籍,源码则是作者为了配合书中理论部分而提供的实践示例。Hibernate是一个流行的开源对象关系映射(ORM)框架,它允许...

    org.hibernate.HibernateException: No Hibernate Session bound to thread

    Hibernate Session 绑定线程解决方案 在 Java web 开发中, Hibernate 是一个非常流行的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在使用 Hibernate 进行数据库操作时,...

    SSH应用开发-Hibernate应用入门.zip_hibernate

    - **读取(Read)**:使用`Session.get()`或`Session.load()`根据主键获取实体,或使用`Session.createQuery()`或`Session.createCriteria()`执行HQL(Hibernate查询语言)查询。 - **更新(Update)**:修改实体后...

    hibernate session.doc

    Customer customer = (Customer) session.get(Customer.class, new Long(1)); session.delete(customer); // 计划执行一个delete语句 tx1.commit(); // 提交事务,此时数据库中的记录会被删除 session1.close(); /...

    hibernate-core-5.0.11.Final.jar

    《深入理解Hibernate Core 5.0.11.Final.jar:源码剖析与应用实践》 Hibernate,作为Java领域中最著名的对象关系映射(ORM)框架之一,极大地简化了数据库操作,使得开发者能够以面向对象的方式处理数据。本文将...

    hibernate源码release-4.1.4.Final版

    Hibernate支持一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存)。一级缓存默认开启,提高性能但需注意并发问题;二级缓存可配置第三方缓存实现,如EhCache,用于跨Session的数据共享。 五、...

    hibernate-release-5.3.2.Final

    《Hibernate ORM 5.3.2.Final:深入解析与应用》 Hibernate ORM,作为Java领域最著名的对象关系映射框架之一,自诞生以来就深受开发者喜爱。2018年7月5日,Hibernate发布了其最新版本——5.3.2.Final,带来了诸多...

    hibernate常见异常

    * 使用 session.refresh(object),当 object 不是数据库中已有数据的对象的时候,不能使用 session.refresh(object) 因为该方法是从 Hibernate 的 session 中去重新取 object,如果 session 中没有这个对象,则会...

    hibernate3所需JAR包

    主要的JAR文件可能包括`hibernate3.jar`,其中包含了如SessionFactory、Session、Query等关键API,以及Entity类的元数据定义。 2. **Hibernate3依赖包**:为了使Hibernate3能正常工作,还需要一系列的依赖库,如...

    hibernate 执行原生sql的几种方式

    1. **使用`Session.createSQLQuery()`** Hibernate的`Session`接口提供了`createSQLQuery()`方法,允许我们直接编写SQL语句。例如: ```java Session session = sessionFactory.openSession(); SQLQuery query =...

    Java.Persistence.with.Hibernate.2nd.Edition 源代码

    4. **SessionFactory & Session**: SessionFactory是Hibernate的核心工厂类,负责创建Session实例。Session是与数据库交互的主要接口,用于执行查询、保存、更新和删除操作。 5. **Transaction Management**: ...

    hibernate-annotations-3.4.0.GA+hibernate-distribution-3.3.2.GA-dist

    Transaction tx = session.beginTransaction(); User user = new User(); // 设置属性... session.save(user); tx.commit(); session.close(); ``` 四、总结 Hibernate 3.3.2和Hibernate Annotations 3.4.0的结合...

    hibernate中session对象的状态详解

    hibernate中session对象的状态详解

    hibernate.properties

    ## to use JTATransactionFactory, Hibernate must be able to locate the UserTransaction in JNDI ## default is java:comp/UserTransaction ## you do NOT need this setting if you specify hibernate....

    hibernate(api 介绍).pdf

    3. org.hibernate.Session Interface:提供了相关的数据库操作,如添、更、删、加、查等基本操作,非线程安全,轻量级,其创建及销毁消耗资源少。每个客户请求对应一个 Session。 4. org.hibernate.Transaction ...

    hibernate--3.Hibernate数据持久化(通过 Session 操纵对象)

    Query&lt;MyEntity&gt; query = session.createQuery("FROM MyEntity WHERE name = :name", MyEntity.class); query.setParameter("name", "Some Name"); List&lt;MyEntity&gt; entities = query.getResultList(); ``` 在处理...

Global site tag (gtag.js) - Google Analytics