1):Hibernate 中 get()  和 load() 有什么不同之处?

1)Hibernate的 get方法,会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在缓存中查找,还没有就查询数据库,数据库中没有就返回null。

2)Hibernate的 load方法加载实体对象的时候,根据映射文件上类级别的lazy属性的配置(默认为true):

 ①  若为true,则首先在Session缓存中查找,看看该id对应的对象是否存在,不存在则使用延迟加载,返回实体的代理类对象(该代理类为实体类的子类,由CGLIB动态生成)。

     等到具体使用该对象(除获取OID以外)的时候,再查询二级缓存和数据库,若仍没发现符合条件的记录,则会抛出一个ObjectNotFoundException。

     ----

 ②  若 为false,就跟Hibernate的get方法查找顺序一样,只是最终若没发现符合条件的记录,则会抛出一个ObjectNotFoundException,所说的load方法抛异常是指在使用该对象的数据时,

     数据库中不存在该数据时抛异常,而不是在创建这个对象时。

2):sava()?

Session的save()方法用来将一个临时对象转变为持久化对象,也就是将一个新的实体保存到数据库中。通过save()将持久化对象保存到数据库需要经过以下步骤:

1,系统根据指定的ID生成策略,为临时对象生成一个唯一的OID;

2,将临时对象加载到缓存中,使之变成持久化对象;

3,提交事务时,清理缓存,利用持久化对象包含的信息生成insert语句,将持久化对象保存到数据库。

提示:保存的时候跟主键生成策略有直接关系,常用属性如下

<!--手动主键生成策略-->

<generator class="assigned"/>

<!--indentity:针对mysql数据库-->

<!--sequence:针对于oracle数据库-->

<!--increment:查询数据库最大主键值+1-->

3):update()?

1):首先你要知道,hibernate的update操作的运行机理:

2):hibernate的update是怎么样自动的进行update操作的呢?

3):首先hibernate先会执行一个select操作,到数据库中查找

4):当前要update操作的对象的主键是否存在,类似于:

5):select id from table where id=XXX

6):如果查找到了改id,就说明该对象是一个持久化对象,

7):如果该对像的某些属性变化了,hibernate就会自动的执行update操作,

8):同步数据库中的该对象。

9):如果数据库找不到要更新的对象,则会报异常找不到需要更新的对象

提示点:update 默认会更新所有字段信息。要想实现动态更新字段 需要修改映射文件添加以下配置:dynamic-update="true"

4):savaOrUpdate()?

简单来说就是 保存或者更新,那么是如何实现的那?

保存:的依据就是,根据当前 new的这个对象判断他的 OID 是否有效(也可以理解为主键在数据库中是否存在)如果无效则执行保存操作。

更新:同理保存的理念,如果OID 有效则执行更新操作。

提示:这里的更新不会优先执行查询的SQL语句,而是直接更新所有字段。

5):merge()?

1):如果merge的对象在数据库中不存在,merge将会进行save操作,作用等同于updateOrSave();而update因为找不到对象而报错。)

2):如果merge的对象能在数据库中操作,merge操作和update操作效果一样。

3):新new一个对象,如果该对象设置了ID,则这个对象就当作游离态处理。

4):merge可以持久化游离态的对象A,持久化后的对象A仍然处于游离态,持久化的对象A不和session关联。

5):merge返回持久化对象的副本,该副本处于持久化态。

分享知识-快乐自己:Hibernate 中 get() 和 load()、sava、update、savaOrUpdate、merge,不同之处及执行原理?的更多相关文章

  1. Hibernate中Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法有什么区别?

    Hibernate的对象有三种状态:瞬态.持久态和游离态.游离状态的实例可以通过调用save().persist()或者saveOrUpdate()方法进行持久化:脱管状态的实例可以通过调用 upda ...

  2. Hibernate中get()和load()方法区别

    get和load方式是根据id取得一个记录下边详细说一下get和load的不同,因为有些时候为了对比也会把find加进来. 1.从返回结果上对比:load方式检索不到的话会抛出org.hibernat ...

  3. Hibernate中get()和load()的区别

    Hibernate中根据Id单条查询获取对象的方式有两种,分别是get()和load(),来看一下这两种方式的区别. 1. get() 使用get()来根据ID进行单条查询: User user=se ...

  4. 【hibernate】Hibernate中get()和load()的区别

    Hibernate中根据Id单条查询获取对象的方式有两种,分别是get()和load(),来看一下这两种方式的区别. 1. get() 使用get()来根据ID进行单条查询: 1 User user= ...

  5. Hibernate中get()与load()的区别,以及关于ThreadLocal的使用方法

    一.get方法和load方法的简易理解 (1)get()方法直接返回实体类,如果查不到数据则返回null.load()会返回一个实体代理对象(当前这个对象可以自动转化为实体对象),但当代理对象被调用时 ...

  6. Hibernate中Session.get()/load()之区别

    原文链接http://sunxin1001.iteye.com/blog/292090 Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象.其区 ...

  7. hibernate中get和load区别

    在日常开发中,获取数据时必不可少的,这样就要用到get和load方法来实现了.下面简单说一下get和load的区别. 1.返回值不同 使用get方法检索数据时,没有该数据返回值为null. 而使用lo ...

  8. hibernate中save()、update()、saveOrUpdate()的区别

    save()方法很显然是执行保存操作的,如果是对一个新的刚new出来的对象进行保存,自然要使用这个方法了,数据库中没有这个对象. update()如果是对一个已经存在的托管对象进行更新那么肯定是要使用 ...

  9. Hibernate 中 get()和load()的区别

    一.1.程序检索数据库中不存在的OID:     load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常     get方法检索不到的话会返回nu ...

随机推荐

  1. java查看工具jinfo-windows

    Generates configuration information. This command is experimental and unsupported. Synopsis jinfo [  ...

  2. 从有序数组中查找某个值 low_bound

    二分搜索 题意: 给定长度为n的单调不下降数列a0, ...an-1和一个数k,求满足ai>=k条件的最小的i. 不存在的情况下输出n. 输入: 5        3 2 3 3 5 6 输出: ...

  3. Struts2学习四----------动态方法调用

    © 版权声明:本文为博主原创文章,转载请注明出处 Struts2动态方法调用 - 默认:默认执行方法中的execute方法,若指定类中没有该方法,默认返回success <package nam ...

  4. CentOS6.5下Oracle11G-R2安装、卸载

    CentOS6.5下Oracle11G-R2安装.卸载 资源下载地址(包含本人全部安装过程中,系统备份文件):http://download.csdn.net/detail/attagain/7700 ...

  5. 产生N个不重复的随机数的快速算法

    //seed array ,,,,,,,,,}; //随机数个数 ; //结果存放在里面 ]; ; i < N; i++) { //从剩下的随机数里生成 , startArray.length ...

  6. php selenium 测试验证码问题

    $this->pause(10000)这段代码用于停止程序执行,可以在这个空隙内输入验证码

  7. Bootstrap学习速查表(二) 排版及表格

    一.h1~h6标签 固定不同级别标题字体大小,h1=36px,h2=30px,h3=24px,h4=18px,h5=14px和h6=12px. 1.重新设置了margin-top和margin-bot ...

  8. chessy 提高篇系列 阅读笔记

    java提高篇(一)—–理解java的三大特性之封装 封装的好处, 汇聚属性和方法 减少修改对 其他处的影响 控制get和set方法. java提高篇(二)—–理解java的三大特性之继承 继承的好处 ...

  9. 12 redis之aof日志持久化

    Aof 的配置 appendonly no # 是否打开 aof日志功能 appendfsync always # 每1个命令,都立即同步到aof. 安全,速度慢 appendfsync everys ...

  10. hdu2473 Junk-Mail Filter 并查集+删除节点+路径压缩

    Description Recognizing junk mails is a tough task. The method used here consists of two steps:  1) ...