- 浏览: 1313315 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (732)
- Java_about (146)
- Spring_Hibernate_Struts_OpenSource (27)
- linux_unix (62)
- life_sth (22)
- js_css_html_xml_nodejs (69)
- design_pattens (1)
- Perl (8)
- php_ecshop (4)
- DB_Mysql_Oracle_Informix_SqlServer (43)
- JSTL (8)
- Testing_自动化测试 (42)
- DB_ID_UUID (4)
- SEM_SEO (1)
- english_study_improvement (4)
- SVN_Git (9)
- WebService_SOA_CloudComputing (3)
- E-Commerce (1)
- Lucene_Solr (7)
- others (2)
- Regex (2)
- tomcat_jetty (8)
- zeroc-ice (1)
- java_excel (5)
- ant_maven_gradle (5)
- Unity_VR_AR_C# (2)
- jmeter (1)
- XPath_dom4j (1)
- Ruby_and_Rails (68)
- write_a_rails (17)
- manage_and_team (1)
- getting_real (1)
- ubuntu (20)
- git_and_git_flow (7)
- TODO (1)
- PM_design (2)
- Python_and_Django (8)
- NoSql_mongo_redis (24)
- C/C++ (3)
- vi_vim_gvim (0)
- c#_.Net_windows编程_dll (10)
- Php_and_Yii (9)
- Android_IOS (31)
- Mysql (5)
- sa_运维_network_硬件 (37)
- lua (2)
- c_cpp_VisualStudio (21)
- 硬件-RM-Arduino (6)
最新评论
-
shenkun58:
...
NoClassDefFoundError: Could not initialize springframework.BeanCreationException -
liaojia1:
正解,感谢
NoClassDefFoundError: Could not initialize springframework.BeanCreationException -
flingfox63:
谢谢分享,电脑上有IPV6,导致了Guard启动不了……
ruby错误解决: Address family not supported by protocol - connect(2) -
c39274936:
s = "hello_world_ruby" ...
驼峰格式和下划线格式转换_translation between camel and snake format -
yfj300:
学习了学习了学习了学习了
硬盘基本知识(磁道、扇区、柱面、磁头数、簇、MBR、DBR)
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
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 方法。
发表评论
-
【Apache ZooKeeper】命令行zkCli.sh使用指南
2016-07-22 20:32 8667from:http://blog.sina.com. ... -
获取spring的ApplicationContext几种方式
2016-05-17 16:39 1328From:http://blog.sina.com.cn/ ... -
Velocity缓存与穿透
2016-03-17 16:47 726总评:只是标记一下这种用法hack方法。这种场景下用这 ... -
Spring的 classpath 通配符加载配置文件
2016-03-06 08:03 1248classpath:app-Beans.xml ... -
logback-log4j比较-优点-使用例子
2016-02-29 17:56 4114搞这个玩意儿,不是特别好啊。为啥不能有好过度,玩儿死程序猿 ... -
spring3_学习笔记和总结_学习记录
2011-04-05 23:58 1157spring3_学习笔记和总结_学习记录 最近又有机会用sp ... -
spring_自动启动程序_singleton
2011-03-22 14:55 2138spring使用中碰到几个需求: 1 要求singleton ... -
Hibernate_Tools插件的安装和使用
2010-12-18 10:56 1243一段时间没有用Hibernate的tools,又忘了。记录一下 ... -
Hibernate的Session的一点记录
2010-11-30 11:46 1218系统出现一个bug,还 ... -
开源的合理性和弊端(讨论开源软件)
2010-10-28 14:33 969这两天在Linux上安装软件,觉得很痛苦。应该是自己水平还有限 ... -
Hibernate_count_sum_统计函数的返回结果类型_与怎样兼容
2010-08-09 16:25 2390今天碰到一个Hibernate的问题,记录一下。 在本机测试 ... -
Hibernate_Error_a different object with the same identifier value in session
2010-08-05 15:03 1272Hibernate_Error: a different o ... -
Hibernate_tools_eclipseJaveEE_error:NoClassDefFoundError: SWTResourceUtil
2010-08-03 10:16 1588java.lang.NoClassDefFoundError: ... -
Hibernate_c3p0_报错_AbstractMethodError:OracleConnection.getHoldability()I
2010-07-15 12:17 2845Hibernate_c3p0_报错_AbstractMetho ... -
Hibernat_报错_Error: NoClassDefFoundError: javax/transaction/Synchronization
2010-07-15 11:26 1248Hibernat_报错_Error: NoClassDefFo ... -
Hibernate_c3p0_警告_WARN Both hibernate-style property 'hibernate.c3p0.max_size'
2010-07-15 11:04 2405Hibernate_c3p0_警告_WARN Bo ... -
Hibernate_报错_NoClassDefFoundError: Could not initialize class HibernateUtil
2010-07-15 10:40 3047Hibernate_报错_Error: NoClassDefF ... -
JUnit测试学习摘录
2009-12-22 11:05 1143最近有点儿时间,抓紧时间把一知半解的测试重新温习并提高些。 ... -
dom4、jdom中文乱码问题
2009-10-19 15:38 2619见了dom4j中文乱码问题,主要用在给xml文件添加注释add ... -
XMLBEANS 2.0 —— 一位JAVA开发人员的视点
2009-09-29 14:49 1854XMLBEANS 2.0 —— 一位JA ...
相关推荐
2. **Session**:在Hibernate中,`Session`对象是数据库会话的代表,负责在应用程序和数据库之间建立连接。它可以执行查询、保存、更新和删除对象,同时提供事务管理和缓存功能。 3. **SessionFactory**:`...
`Session.flush()`方法是一个关键的操作,它强制Hibernate将内存中的对象状态同步到数据库,确保数据的一致性。这篇博客深入探讨了`Session.flush()`的工作原理和应用场景。 `Session`在Hibernate中主要有以下职责...
User fetchedUser = (User) session.get(User.class, 1L); // 删除 session.delete(fetchedUser); session.close(); sessionFactory.close(); ``` 在`JavaBeanTest71`这个文件中,可能包含了对上述概念的实践代码...
《Hibernate In Action(Java.Persistence.with.Hibernate)》是一本深入探讨Hibernate框架的书籍,源码则是作者为了配合书中理论部分而提供的实践示例。Hibernate是一个流行的开源对象关系映射(ORM)框架,它允许...
Hibernate Session 绑定线程解决方案 在 Java web 开发中, Hibernate 是一个非常流行的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在使用 Hibernate 进行数据库操作时,...
- **读取(Read)**:使用`Session.get()`或`Session.load()`根据主键获取实体,或使用`Session.createQuery()`或`Session.createCriteria()`执行HQL(Hibernate查询语言)查询。 - **更新(Update)**:修改实体后...
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,作为Java领域中最著名的对象关系映射(ORM)框架之一,极大地简化了数据库操作,使得开发者能够以面向对象的方式处理数据。本文将...
Hibernate支持一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存)。一级缓存默认开启,提高性能但需注意并发问题;二级缓存可配置第三方缓存实现,如EhCache,用于跨Session的数据共享。 五、...
《Hibernate ORM 5.3.2.Final:深入解析与应用》 Hibernate ORM,作为Java领域最著名的对象关系映射框架之一,自诞生以来就深受开发者喜爱。2018年7月5日,Hibernate发布了其最新版本——5.3.2.Final,带来了诸多...
* 使用 session.refresh(object),当 object 不是数据库中已有数据的对象的时候,不能使用 session.refresh(object) 因为该方法是从 Hibernate 的 session 中去重新取 object,如果 session 中没有这个对象,则会...
主要的JAR文件可能包括`hibernate3.jar`,其中包含了如SessionFactory、Session、Query等关键API,以及Entity类的元数据定义。 2. **Hibernate3依赖包**:为了使Hibernate3能正常工作,还需要一系列的依赖库,如...
1. **使用`Session.createSQLQuery()`** Hibernate的`Session`接口提供了`createSQLQuery()`方法,允许我们直接编写SQL语句。例如: ```java Session session = sessionFactory.openSession(); SQLQuery query =...
4. **SessionFactory & Session**: SessionFactory是Hibernate的核心工厂类,负责创建Session实例。Session是与数据库交互的主要接口,用于执行查询、保存、更新和删除操作。 5. **Transaction Management**: ...
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对象的状态详解
## 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....
3. org.hibernate.Session Interface:提供了相关的数据库操作,如添、更、删、加、查等基本操作,非线程安全,轻量级,其创建及销毁消耗资源少。每个客户请求对应一个 Session。 4. org.hibernate.Transaction ...
Query<MyEntity> query = session.createQuery("FROM MyEntity WHERE name = :name", MyEntity.class); query.setParameter("name", "Some Name"); List<MyEntity> entities = query.getResultList(); ``` 在处理...