`
iamcrzay
  • 浏览: 57748 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Session.flush()的一个用法

阅读更多
别的先不说 先来上代码
    public void testSaveUser(){
     	 Session session=null;
   	     Transaction tx=null;
   	   try{
   		   session=HibernateUtil.getSession();
   		   tx=session.beginTransaction(); 
   	       User user1=new User();
   	       user1.setId("001");
   	       user1.setUsername("Iam001");
   	       session.save(user1);
   	       
   	       user1.setUsername("Iamnot001");
   	 
   	       User user2=new User();
   	       user2.setId("007");
   	       user2.setUsername("iam007");
   	       
   	       session.save(user2);

   		   tx.commit();
   	   }catch(Exception e){
   		   e.printStackTrace();
   		   tx.rollback();
   	   }finally{
   		   HibernateUtil.colseSession(session);
   	   }
     } 

这段代码我们的执行产生的sql语句如下(如要执行这段代码 请配置好Hibernate环境 用junit就可以执行):
Hibernate: insert into t_user2 (username, password, createTime,     expireTime, id) values (?, ?, ?, ?, ?)
 Hibernate: insert into t_user2 (username, password, createTime, expireTime, id) values (?, ?, ?, ?, ?)
  Hibernate: update t_user2 set username=?, password=?,  createTime=?,  expireTime=? where id=?

由此我们可以得出一下结论 :
    hibernate 执行sql语句的顺序是insert(save)-->update--->delete
   但是如果我们一定要要求在user1更改后 才能将user2添加到数据库 (我们项目中可能会碰到这种需求)那该怎么办?
  
   这个时候session.flush()的作用就显现出来啦
           我们可以在user 进行了更改之后 就显示的调用 session.flush()方法
这样这个的问题就可以迎刃而解

分享到:
评论
1 楼 mickey_mjy 2010-03-12  
您能写一下具体写session.flush的位置么

相关推荐

    hibernate的session.flush

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

    hibernate的flush()、refresh()、clear()针对一级缓存的操作的区别.docx

    它会发送一个SELECT语句到数据库,查询指定对象的最新数据,并刷新Session缓存中的对象。需要注意的是,`refresh()`方法在事务的隔离级别为Read Committed(读已提交)时才能保证效果,这是因为在其他隔离级别下,...

    hibernate的flush机制

    在给定的部分内容中,提到了一个典型的错误场景,其中包含了一个常见的错误操作序列: ```java SessionFactory sf = new Configuration().configure().buildSessionFactory(); Session s = sf.openSession(); Cat ...

    Hibernate code

    根据提供的文件信息,我们可以深入探讨Hibernate中的几个关键概念与操作,包括`Session.flush()`方法的使用、不同主键生成策略下的保存操作等。 ### Hibernate Session.flush() 方法详解 #### 一、基本概念 在...

    2022年Hibernate下数据批量处理Java教程.docx

    我们可以设置一个合理的 JDBC 批处理大小,例如 hibernate.jdbc.batch_size 20,然后在一定间隔对 Session 进行 flush() 和 clear()。这样可以避免内存溢出错误,并提高性能。 在批量插入数据时,我们可以使用以下...

    Hibernate的事务处理机制和flush方法的用法.docx

    这可能是因为在多线程环境中,一个线程正在使用Session时,另一个线程尝试访问或修改Session,导致并发控制问题。此外,不正确的`flush`或事务提交顺序也可能导致该异常。例如: 1. 在事务中,如果先调用了`evict`...

    第一个hibernate程序及解释

    使用Session的createCriteria()或createQuery()方法查询数据,然后调用list()获取结果列表。 ```java List<User> users = session.createCriteria(User.class).list(); for (User u : users) { System.out.println...

    Hibernate持久层方法汇总

    在实际使用中,开发者通常会在一个`Session`生命周期内进行一系列操作,然后在适当的时候调用`flush()`方法强制Hibernate同步数据库,最后在事务结束时调用`commit()`来完成事务。这些方法的正确组合使用是实现高效...

    java-hibernate持久化

    在Java开发中,Hibernate是一个流行的ORM(Object-Relational Mapping)框架,它提供了一种将Java对象映射到关系数据库的方法,简化了数据库操作。"java-hibernate持久化"这个主题主要关注如何使用Hibernate来管理对象...

    Hibernate下数据批量处理解决方案

    `scroll()`方法返回一个`ScrollableResults`对象,允许我们以游标方式处理结果集,这在处理大量数据时非常有效。同样,我们需要定期调用`flush()`和`clear()`以控制内存使用。例如: ```java Session session = ...

    退出页面自动清除session技巧

    这里首先设置了一个名为`name`的Session属性,然后通过`removeAttribute()`方法将其移除。这种方法适用于仅需要删除特定属性的情况。 2. **使用`invalidate()`方法彻底清除Session** 当需要彻底清除整个Session...

    在Hibernate中处理批量更新和批量删除

    这种方法的问题在于,每次更新都需要执行一个单独的SQL语句,这不仅消耗了过多的网络资源,而且极大地降低了数据库的性能,尤其是在更新大量数据时。 ### 优化批量更新 为了优化批量更新操作,可以采取以下策略: ...

    Hibernate批量处理数据

    这是因为Hibernate的Session维护了一个一级缓存,用于存储当前会话期间的所有实体对象。当对象数量过大时,会导致内存不足。为了解决这一问题,可以通过以下方式: 1. **定时刷新缓存**:在循环过程中,设定一定的...

    在Hibernate应用中处理批量更新和批量删除

    这是最直观的方法,即通过循环遍历需要更新的实体集合,对每一个实体进行修改后调用`session.update()`或`session.saveOrUpdate()`方法。例如: ```java Transaction tx = session.beginTransaction(); List...

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

    Session对象就像一个临时的工作区域,用于在应用程序和数据库之间传递信息。当我们在Session上进行操作时,这些操作不会立即反映到数据库中,而是被缓存起来,直到调用`flush()`方法或者事务提交时才会真正执行。 ...

    Java Web程序设计-1期 项目库_单元案例_Request和Response-Session对象案例.doc

    `out.newLine()`插入一个新行,`out.getBufferSize()`和`out.getRemaining()`分别显示缓冲区的大小和剩余空间,`out.isAutoFlush()`检查是否启用了自动刷新,`out.flush()`则强制清空缓冲区并将数据发送到客户端,而...

    hibernate性能优化.doc

    这是因为 Hibernate 的 Session 有一个一级缓存,会将所有对象存储在内存中。如果不及时清空缓存,内存将会溢出。 解决方法是使用事务和 flush() 方法来清空缓存。例如: ```java Transaction tx = session.begin...

    hibernate更新操作

    3. **数据查询与更新**:在同一个Session中,我们可以通过Session的`find()`方法查询数据。在示例中,`session.find("from User")`执行了一个HQL(Hibernate Query Language)查询,返回了User表的所有记录。然后,...

    jsp Hibernate批量更新和批量删除处理代码.docx

    对于每一个查询到的Customer对象,增加其年龄并立即调用`flush()`方法同步更新数据库,然后调用`evict()`方法从缓存中移除对象以释放内存。最后提交事务并关闭Session。 然而,这种方法有两个主要缺点。首先,一次...

    hql的增删改查

    在Hibernate中,通常通过`Session`对象的方法来实现这一操作。 **代码示例:** ```java public void save(Item item) { // 获取当前会话 Session session = this.getCurrentSession(); // 使用save方法保存对象...

Global site tag (gtag.js) - Google Analytics