- 浏览: 1476006 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (798)
- struts2 (42)
- servlet (20)
- quartz (4)
- jquery & ajax (24)
- tomcat (5)
- javascript (15)
- struts1 (8)
- 搜索关键字及链接 (3)
- fckeditor (3)
- Apache (5)
- spring (22)
- linux (3)
- 企业应用 (8)
- 综合应用 (13)
- 服务器 (2)
- 数据库 (85)
- 性能调优 (21)
- 网络应用 (15)
- 缓存技术 (8)
- 设计模式 (39)
- 面试题 (7)
- 程序人生&前辈程序员 (29)
- java基础 (59)
- hibernate (75)
- log4j (4)
- http (11)
- 架构设计 (28)
- 网页设计 (12)
- java邮件 (4)
- 相关工具 (11)
- ognl (7)
- 工作笔记 (18)
- 知识面扩展 (12)
- oracle异常 (1)
- 正则表达式 (2)
- java异常 (5)
- 项目实践&管理 (1)
- 专业术语 (11)
- 网站参考 (1)
- 论坛话题 (2)
- web应用 (11)
- cxf&webservice (22)
- freemarker (3)
- 开源项目 (9)
- eos (1)
- ibatis (6)
- 自定义标签 (3)
- jsp (3)
- 内部非公开文档(注意:保存为草稿) (0)
- 国内外知名企业 (2)
- 网店 (3)
- 分页 (1)
- 消费者习惯 (2)
- 每日关注 (1)
- 商业信息 (18)
- 关注商业网站 (1)
- 生活常识 (3)
- 新闻 (2)
- xml&JSON (5)
- solaris (1)
- apache.common (3)
- BLOB/CLOB (1)
- lucene (2)
- JMS (14)
- 社会进程 (8)
- SSH扩展 (2)
- 消费心理 (1)
- 珠三角 (1)
- 设计文档 (1)
- XWork&webwork (1)
- 软件工程 (3)
- 数据库及链接 (1)
- RMI (2)
- 国内外知名企业&人物 (1)
最新评论
-
司c马:
简介易懂、
OutputStream和InputStream的区别 -
在世界的中心呼喚愛:
解决我的问题
Java获取客户端的真实IP地址 -
bo_hai:
都是些基本的概念呀!
SSO -
tian_4238:
哥们,你也是搞水利这块的吧。
巧用SQLQuery中的addScalar -
loveEVERYday:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
(madp:
如:
session.beginTransaction();
Person p = new Person();
p.setId(169);
session.delete(p);
是不能删除记录的,因为p处于临时状态
)
在Hibernate中,对象有三种状态:临时状态、持久状态和游离状态。
临时状态:当new一个实体对象后,这个对象处于临时状态,即这个对象只是一个保存临时数据的内存区域,如果没有变量引用这个对象,则会被jre垃圾回收机制回收。这个对象所保存的数据与数据库没有任何关系,除非通过Session的save或者SaveOrUpdate把临时对象与数据库关联,并把数据插入或者更新到数据库,这个对象才转换为持久对象。
例如:Emp e=new Emp(); //创建临时对象
e.setEmpno((long) 8888);
e.setEName("mike");
...
EmpDAO d=new EmpDAO();
d.save(e); //持久化
...
持久状态:持久化对象的实例在数据库中有对应的记录,并拥有一个持久化表示(ID)。对持久化对象进行delete操作后,数据库中对应的记录将被删除,那么持久化对象与数据库记录不再存在对应关系,持久化对象变成临时状态。
持久化对象被修改变更后,不会马上同步到数据库,知道数据库事务提交。在同步之前,持久化对象是脏的(Dirty)。
例如:
Emp e=new Emp(); //创建了临时的对象
EmpDAO edao= new empDAO();
e=edao.findbyEmpno((long) 7786); //使对象与数据库记录对应,从而持久化
e.setEname("新的名字"); //修改了持久化对象,使之处于 Dirty
......
edao.saveorupdate(e); //保存,但是仍然 Dirty
tran.commit(); //提交,实现与数据库同步,不再Dirty
......
游离状态:当Session进行了Close、Clear或者evict后,持久化对象虽然拥有持久化标识符和与数据库对应记录一致的值,但是因为会话已经消失,对象不在持久化管理之内,所以处于游离状态(也叫:脱管状态)。游离状态的对象与临时状态对象是十分相似的,只是它还含有持久化标识。
其中,持久化状态的对象,简称为:PO
而临时状态和游离状态的对象,简称为: VO
(madp:
Java应用程序与Hibernate之间的主要运行时接口。它是抽象了持久化服务概念的核心抽象API类。 Session的主要功能是提供对映射的实体类实例的创建,读取和删除操作。 游离状态的实例可以通过调用update(),lock(),replicate(),save(),persist()或者saveOrUpdate()方法进行持久化。持久化实例可以通过调用 delete()变成游离状态。通过get()或load()方法得到的实例都是持久化状态的。游离或者自由状态下的实例可以通过调用merge()方法成为一个新的持久化实例。 其具体实现并不一定是线程安全的。每个线程/事务应该从一个SessionFactory获取自己的session实例。 如果其持久化对象类是可序列化的,则Session实例也是可序列化的。 一个典型的事务应该使用下面的形式:Session sess = factory.openSession(); 如果Session抛出了异常, 事务必须回滚而session会被废弃。在异常发生后Session的内部状态可能会与数据库失去同步
本文介绍Hibernate的三个状态,此为第一部分。Java应用程序与Hibernate之间的主要运行时接口。它是抽象了持久化服务概念的核心抽象API类。
Session的生命周期绑定在一个物理的事务(tansaction)上面。(长的事务可能跨越多个数据库事物。)
实例可能以下面三种状态存在:
◆自由状态(transient): 不曾进行持久化,未与任何Session相关联
◆持久化状态(persistent): 仅与一个Session相关联
◆游离状态(detached): 已经进行过持久化,但当前未与任何Session相关联
save()和persist()将会引发SQL的INSERT,delete()会引发SQLDELETE,而update()或merge()会引发SQLUPDATE。对持久化(persistent)实例的修改在刷新提交的时候会被检测到,它也会引起SQLUPDATE。saveOrUpdate()或者replicate()会引发SQLINSERT或者UPDATE。
)
发表评论
-
自定义用户类(UserType)的使用
2011-08-04 10:46 1804学习hibernate有段时间了,最近复习这门技术时看到了自定 ... -
技巧:利于ThreadLocal模式管理Session
2011-08-02 10:31 1230在利用Hibernate开发DAO模块时,我们和Session ... -
Hibernate中的回调与拦截机制
2011-07-27 17:31 1431在某些情况下,我们需要对实体的CURD操作进行捕获并执行一些操 ... -
HibernateTemplate中HibernateCallback的事务
2011-07-04 14:41 1410目的:使用HibernateTemplate执行execute ... -
Hibernate的复杂用法HibernateCallback
2011-07-04 14:40 1296HibernateTemplate还提供一种更加灵活的方式来操 ... -
Hibernate session FlushMode有五种属性
2011-07-04 13:59 16911、NEVER:已经废弃了,被MANUAL取代了2 MANUA ... -
数据库持久层——浅谈hibernate中的Session
2011-07-01 22:49 1636大多数情况下,Session 管理的目标聚焦于通过合理的设 ... -
详解Hibernate Session
2011-07-01 22:42 1457这里介绍Hibernate Session,Ses ... -
HttpSession与Hibernate中Session的区别
2011-07-01 22:41 1244一、javax.servlet.http.HttpSess ... -
巧用SQLQuery中的addScalar
2011-06-02 17:16 5700当我们用HQL进行子查询的时候,如select * from ... -
hibernate中SQLQuery的addEntity();方法
2011-04-13 14:48 2863如果使用原生sql语句进行query查询时,hibernate ... -
Hibernate的clear(),flush(),evict()方法详解
2011-03-24 11:18 17341.Clear 方法 无论是Load 还是 G ... -
hibernate模糊查询-Restrictions.ilike & Expression.like
2011-03-11 10:32 16319Criteria criteria = session.c ... -
Hibernate分页查询小结
2011-03-10 11:14 1798通常使用的Hibernate通常是三种:hql查询,QBC查询 ... -
current_session_context_class
2011-03-07 15:31 1259此设置的作用如下: What does sessionFac ... -
Hibernate的拦截器和监听器
2010-12-14 15:06 1358核心提示:最近项目需要,用到了Hibernate的拦截器和 ... -
孙卫琴.精通Hibernate:Java对象持久化技术详解_触发器使缓存与数据库不一致
2010-12-14 08:46 1345p198 -
孙卫琴.精通Hibernate:Java对象持久化技术详解_优化报表查询的性能
2010-12-13 17:51 1244p332 -
孙卫琴.精通Hibernate:Java对象持久化技术详解_查询结果类型
2010-12-13 17:34 1272p329 -
孙卫琴.精通Hibernate:Java对象持久化技术详解_投影查询
2010-12-13 17:31 1381p325
相关推荐
treeview 复选框 三种状态
hibernate对象三种状态,有详细的代码介绍三种状态,易理解,有具体代码实现,有详细备注,让你轻松理解三种状态的存在形式
拥有三种状态纯Material风格的Android Checkbox控件
操作系统三种状态转换图操作系统三种状态转换图操作系统三种状态转换图操作系统三种状态转换图操作系统三种状态转换图
PB 11.5 CheckBox三种状态的实例。
C#实现TreeView的三种状态的实例
ijToggler是一款支持三种状态的jQuery开关按钮插件。该开关按钮插件实用简单,支持选择状态,未选状态和中间状态三种状态。
该文档详细描述了Hibernate的三种状态,适合对Hibernate学习!
TreeView的CheckBoxs的第三种状态(有部分子结点被选中),TreeView的CheckBoxs的第三种状态(有部分子结点被选中)。
这是一个讲解了关于hibernate三种状态之间的转换,如果想知道他们之间的相关总结和理解,这是一个不错的选择
NULL 博文链接:https://unddone8373229.iteye.com/blog/1104797
按钮的三种状态(普通、聚焦、按下),我在网上找过其他资源,都非常复杂,我的实现很简单,就用了定时器和cbitmap函数就实现了
Hibernate三种状态
本文主要讲了一下三态门的三种输出状态,一起来学习一下
Hibernate 三种状态
NULL 博文链接:https://junge8618.iteye.com/blog/963692
电路有三种状态.doc
05_传智播客hibernate教程_实体对象的三种状态与saveOrUpdate方法