zoukankan      html  css  js  c++  java
  • Session方法

    Session的save()和persist()方法
    Session的save()方法使一个临时对象转变为持久化对象。它完成以下操作:
    (1)将临时对象加入到Session缓存中,使其进入持久化状态。
    (2)选用映射文件指定的标识符生成器,为持久化对象分配唯一的OID。
    (3)计划执行一个insert语句。  
    Session的save()方法是用来持久化临时对象的。不应将持久化对象或游离对象传递给save()方法。
    若将持久化对象传递给save()方法,则该步保存操作是多余的。
    若将游离对象传递给save()方法,则会重新生成OID,再保存一次。

    Session的persist()方法与save()方法类似,也能将临时对象转变为持久化对象。
    persist()方法与save()方法的区别在于:
    persist()方法不保证立即为持久化对象的OID赋值,而是有可能在Session清理缓存的时候才为OID赋值。
    此外,如果是在事物边界以外调用persist()方法,则该方法不会计划执行insert语句。而save()方法不论是在事物边界以外还是以内,都会计划执行insert语句。

    Session的load()与get()方法
    Session的load()与get()方法都能从根据给定的OID从数据库中加载一个持久化对象,这两个方法的区别在于:
    (1)当数据库中不存在与OID对应的记录时,load()方法抛出org.hibernate.ObjectNotFoundException异常,而get()方法返回为null。
    (2)load方法采用配置的加载策略(默认为延迟加载),而get()方法则会忽略配置,总是采用立即加载方法。

    Session的update()方法
    Session的update()方法使一个游离对象转变为持久化对象。它完成以下操作:
    (1)将游离对象加入到Session缓存中,使其转变为持久化对象。
    (2)计划执行一个update语句。
    当update()方法关联一个游离对象时,若在Session的缓存中已存在相同的OID的对象时,会抛出异常。

    疑问:如果数据库总没有对应的记录,会产生异常? update语句如果没有记录更新是不会报错的呀?


    Session的saveOrUpdate()方法
    Session的saveOrUpdate()方法同时包含了save()方法与update()方法的功能,如果传入的参数是临时对象,就调用save()方法;如果传入的参数是游离对象,就调用update()方法。HIbernate根据对象的OID,version版本属性等来判断参数是临时对象还是游离对象。

    Session的merge()方法
    Session的merge()方法能够将一个游离对象的属性复制到一个持久化对象中。其处理流程如下:
    (1)根据游离对象的OID到Session缓存中查找匹配的持久化对象。若找到匹配的持久化对象,则将游离对象的属性复制到持久化对象中,计划实行一条update语句,然后返回持久化对象的引用。
    (2)如果在Session的缓存中没有找到与游离对象OID一致的持久化对象,那么就试图根据该OID从数据库中加载持久化对象。如果数据库中存在匹配的持久化对象,则将游离对象的属性复制到刚加载的持久化对象中,计划实行一条update语句,然后返回持久化对象的引用。
    (3)如果数据库中也不存在or对象是临时对象时,则会新建一个对象,将属性赋值到该新建对象中,再持久化新建对象,最后返回新建对象的引用。

    merger()和saveOrUpdate()的区别:

    调用完meger()对象仍然是脱管状态。


    Session的delete()方法
    Session的delete()方法用于从数据库中删除一个Java对象。delete()方法既可以删除持久化对象,也可以删除游离对象。其处理过程如下:
    (1)如果传入的参数是游离对象,则先使游离对象与Session关联,使它变为持久化对象。如果参数是持久化对象,则忽略该步。
    (2)计划执行一个delete语句。
    (3)把对象从Session缓存中删除,该对象进入删除状态。

    Session的replicate()方法
    Session的replicate()方法能够将一个数据库中的对象复制到另一个数据库中。

  • 相关阅读:
    Basic Calculator II
    理解与模拟一个简单servlet容器
    括号字符串有效性验证
    理解与模拟一个简单web服务器
    Tomcat日志输出在linux和windows差异
    SqlCommand执行带GO的SQL脚本文件
    《第一行代码》添加百分比布局库依赖问题
    final 和 static之间的区别和联系
    oracle DB 使用注意点小结
    方法重载(method overloading)
  • 原文地址:https://www.cnblogs.com/YangtzeYu/p/6379956.html
Copyright © 2011-2022 走看看