Hbernate 与数据同步
1、hibernate的操作
http://wenku.baidu.com/view/c91a3f5c804d2b160b4ec033.html这里这篇文章很好。。先查看。
一般情况下:hibernate会把你add,update、delete这些操作封装session的actionQueue操作队列中,(此时没有提交到数据库),提交事务时候,他会去找session中actionQueue操作,他按照actionQueue中的集合一个一个找,先处理insersions,然后updatesions,最后deletesions。所以了,他不会按照你代码中save和update、deleta的顺序来进行数据上操作的。
执行完上述操作后,hibernate要清缓存(tx.commit()这个方法,他有进行了清除缓存的操作),此时,根据(进行add操作)insersions中的对象来设置,他会把该对象persistenceContext中session->persistenceContext->entityEntries->map-header的existsInDatabase=true。所以说,你如果在清除缓存之前把persistenceContext中的那个对象删除了(session.clear()),那他找不到对象,他就会抛异常了,所以你要注意了
2、项目中的一个例子分析
//message是struts2自动封装的一个对象
public void add(User sender, List<User> receivers, Message message) {
for(User receiver : receivers) {
message.setSender(sender);
message.setPostTime(new Date());
message.setReceiver(receiver);
message.setMsgType(0);
message.setIsRead(0);
/*
* 1、本处的model id生成策略是Identity
* 2、session在执行add语句之后,会提交一条insert数据库语句,插入数据库并返回数据库id
* 3、数据库级别设置成未提交读,就可以看到数据了(要用select语句,用工具刷新无法显示数据)
* 4、我们可以发现session的existsInDatabase=true,也说明了已经提交到数据中,并把session与数据库保持同步
* 5、existsInDatabase可以在session->persistenceContext->entityEntries->map-header中找到
* 6、跟踪dubeg发现session底下的actionQueue->insertions modcount会+1,说明他确实改变过(但都是null)
* 7、一般情况下,整个事务提交,需要清除缓存,此时session要根据insertions中的对象,来与数据库同步,也就是如果保存了就要把existsInDatabase=true
* 8、但是此处insertions都是为null。所以就不用再去设置existsInDatabase=true操作了
* 9、运行save这句话后message是处于持久态,persistneceContext存在这个对象,一旦你重新set***这个对象,Hibernate管理就会update数据库中的那个对象
* 10、所以你多次调用message,他也只认为你更新了原来的那个message(由于id一样,他最后还是只保存一个)
*
* */
this.messageDao.add(message);
/*
* 1、清除缓存,并把message从持久态拉出来变成了游离态,你可以发现运行clear之后,这个对象没有在persistenceContext出现过,但是你之前提交的那个message已经在数据中了
* 2、所以在clear之后再add,又一次把message放入持久态,但是他又重新获取了一个id号。所以他判断是新的一个对象来再一次插入数据库
*
*
*/
this.getHbernateDao().getSession().clear();
}
}
参考:
1、http://langhua9527.iteye.com/blog/343311
2、http://blog.csdn.net/wangzhuoyan/article/details/4201485
分享到:
相关推荐
《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...
【hibernate个人学习笔记完整版】是一份详尽的资料,涵盖了Hibernate框架的基础到高级应用,旨在帮助学习者深入理解和掌握这一强大的Java对象关系映射(ORM)工具。Hibernate作为Java开发中的主流ORM框架,它极大地...
【一、O/R Mapping】 O/R Mapping,即对象关系映射,是将对象模型与关系数据库之间进行映射的技术。在Hibernate中,O/R Mapping允许开发者以面向对象的方式...学习和掌握Hibernate有助于提升Java应用的数据管理能力。
《Hibernate学习笔记——马士兵教程解析》 在Java开发领域,ORM(Object-Relational Mapping)框架的使用已经非常普遍,其中Hibernate作为一款优秀的ORM框架,因其强大的功能和易用性深受开发者喜爱。本文将根据马...
【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...
【hibernate4框架学习笔记】 Hibernate是一款强大的ORM(Object-Relational Mapping)框架,它在Java开发中扮演着至关重要的角色,通过提供对象与数据库之间的映射,解决了对象模型和关系模型之间的“阻抗不匹配”...
在深入探讨Hibernate学习笔记第二天的源码之前,我们先来理解一下Hibernate的核心概念。Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者将数据库操作转化为对象模型,大大简化了数据访问层的开发...
《Hibernate3.3_学习笔记》是一份详细记录了Hibernate3.3版本特性和使用方法的文档,旨在帮助开发者深入理解和应用这一强大的对象关系映射(ORM)框架。Hibernate是Java开发中的一个明星库,它简化了数据库操作,...
Hibernate是一款强大的Java持久...通过阅读这份“Hibernate API帮助文档”和“Hibernate学习笔记”,你将能够深入理解Hibernate的工作原理,掌握其API的使用,并能在实际项目中有效地利用Hibernate进行数据持久化操作。
《马士兵Hibernate学习笔记》是一份深入浅出的教程,旨在帮助初学者掌握Hibernate这一流行的Java持久化框架。Hibernate是一个对象关系映射(ORM)工具,它允许开发者用面向对象的方式来操作数据库,从而减少了传统...
**hibernate入门学习笔记+源码** **一、Hibernate简介** Hibernate是一个开源的对象关系映射(ORM)框架,它简化了Java应用与数据库之间的交互。通过提供对象化的数据访问方式,Hibernate消除了传统JDBC代码中的...
**hibernate 3.3学习笔记** 在深入探讨Hibernate 3.3的学习笔记之前,首先需要理解Hibernate是什么。Hibernate是一个强大的开源Java持久化框架,它简化了数据库操作,允许开发者将精力集中在业务逻辑上而不是数据库...
【Hibernate 学习笔记】 Hibernate 是一款开源的对象关系映射(ORM)框架,它为 Java 开发者提供了在关系数据库和面向对象编程之间的一个抽象层。这个框架使得开发者可以使用面向对象的方式来操作数据库,而无需...
【Java学习笔记doc】Hibernate学习教程和笔记 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java开发者与数据库之间的交互。这个文档集合是针对Java初学者和进阶者的一份宝贵资料,旨在深入理解...
根据提供的信息,我们可以总结出以下关于达内HIBERNATE学习笔记的重要知识点: ### 第一章:Hibernate入门 #### 1.1 学习目标 - 理解Hibernate的基本概念。 - 掌握如何使用Hibernate进行开发。 #### 1.2 对象持久...
### Hibernate 学习笔记知识点详解 #### 一、Hibernate 简介 - **概念**:Hibernate 是一种“对象/关系映射”(Object/Relational Mapping,简称 ORM)技术,用于解决 Java 应用程序与关系型数据库交互的问题。 - *...
标题:Hibernate学习笔记3 描述:本篇笔记深入探讨了Hibernate框架中一对多关系的映射及持久化对象状态管理,结合个人理解与实践经验,旨在为读者提供一份详实的学习资料。 ### 一、一对多关系映射详解 在...
### 马士兵 Hibernate 学习笔记概览 #### 一、Hello World 示例 - **简介**:通过简单的示例程序来快速入门 Hibernate 框架。 - **步骤**: 1. 创建 Java 项目 `hibernate_0100_HelloWorld`。 2. 构建 User-...