hibernate4实战之第三部分hibernate的基本开发

hibernate4实战之第三部分hibernate的基本开发

ID:34723205

大小:365.18 KB

页数:17页

时间:2019-03-10

hibernate4实战之第三部分hibernate的基本开发_第1页
hibernate4实战之第三部分hibernate的基本开发_第2页
hibernate4实战之第三部分hibernate的基本开发_第3页
hibernate4实战之第三部分hibernate的基本开发_第4页
hibernate4实战之第三部分hibernate的基本开发_第5页
资源描述:

《hibernate4实战之第三部分hibernate的基本开发》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、1:瞬时(Transient) -由new操作符创建,且尚未与HibernateSession关联的对象被认定为瞬时的。瞬时对象不会被持久化到数据库中,也不会被赋予持久化标识(identifier)。如果瞬时对象在程序中没有被引用,它会被垃圾回收器销毁。使用HibernateSession可以将其变为持久状态,Hibernate会自动执行必要的SQL语句。 2:持久(Persistent) -持久的实例在数据库中有对应的记录,并拥有一个持久化标识。持久的实例可能是刚被保存的,或刚被加载的,无论哪一种,按定义,它存在于相关联的Session作用范围内。Hibern

2、ate会检测到处于持久状态的对象的任何改动,在当前操作单元执行完毕时将对象数据与数据库同步。开发者不需要手动执行UPDATE。将对象从持久状态变成瞬时状态同样也不需要手动执行DELETE语句。 3:脱管(Detached) -与持久对象关联的Session被关闭后,对象就变为脱管的。对脱管对象的引用依然有效,对象可继续被修改。脱管对象如果重新关联到某个新的Session上,会再次转变为持久的,在脱管期间的改动将被持久化到数据库。 通过Session接口来操作Hibernate新增——save方法、persist方法1:persist()使一个临时实例持久化。然而

3、,它不保证立即把标识符值分配给持久性实例,这会发生在flush的时候。persist()也保证它在事务边界外调用时不会执行INSERT语句。这对于长期运行的带有扩展会话/持久化上下文的会话是很有用的。2:save()保证返回一个标识符。如果需要运行INSERT来获取标识符(如"identity"而非"sequence"生成器),这个INSERT将立即执行,不管你是否在事务内部还是外部。这对于长期运行的带有扩展会话/持久化上下文的会话来说会出现问题。 删除——delete方法修改——有四种方法来做,分别是:1:直接在Session打开的时候load对象,然后修改这

4、个持久对象,在事务提交的时候,会自动flush到数据库中。2:修改托管对象,可用update或merge方法3:自动状态检测:saveOrUpdate方法update和merge方法1:如果数据库里面存在你要修改的记录,update每次是直接执行修改语句;而merge是先在缓存中查找,缓存中没有相应数据,就到数据库去查询,然后再合并数据,如果数据是一样的,那么merge方法不会去做修改,如果数据有不一样的地方,merge才真正修改数据库。2:如果数据库中不存在你要修改的记录,update是报错;而merge方法是当作一条新增的值,向数据库中新增一条数据。3:up

5、date后,传入的TO对象就是PO的了,而merge还是TO的。4:如果你确定当前session没有包含与之具有相同持久化标识的持久实例,使用update()。如果想随时合并改动而不考虑session的状态,使用merge()。换句话说,在一个新session中通常第一个调用的是update()方法,以保证重新关联脱管对象的操作首先被执行。5:请注意:使用update来把一个TO变成PO,那么不管是否修改了对象,都是要执行updatesql语句的。  通常下面的场景会使用update()或saveOrUpdate()1:程序在第一个session中加载对象2:该

6、对象被传递到表现层3:对象发生了一些改动4:该对象被返回到业务逻辑层5:程序调用第二个session的update()方法持久这些改动 saveOrUpdate方法做下面的事:1:如果对象已经在本session中持久化了,不做任何事2:如果另一个与本session关联的对象拥有相同的持久化标识,抛出一个异常3:如果对象没有持久化标识属性,对其调用save()4:如果对象的持久标识表明其是一个新实例化的对象,对其调用save()。5:如果对象是附带版本信息的(通过)并且版本属性的值表明其是一个新实例化的对象,save()它

7、。6:否则update()这个对象 merge做如下的事情1:如果session中存在相同持久化标识的实例,用用户给出的对象的状态覆盖旧有的持久实例2:如果session中没有相应的持久实例,则尝试从数据库中加载,或创建新的持久化实例3:最后返回该持久实例4:用户给出的这个对象没有被关联到session上,它依旧是脱管的 按主键查询1:load方法:load的时候首先查询一级缓存,没有就创建并返回一个代理对象,等到使用的时候,才查二级缓存,如果二级缓存中没有数据就查数据库,如果数据库中没有,就抛例外2:get方法:先查缓存,如果缓存中没有这条具体的数据,就查数据

8、库,如果数据库没有值,就

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。