hiberate session

来源:互联网 发布:travian 兵工廠 計算法 编辑:程序博客网 时间:2024/06/05 10:15

在使用hibernate时,我们首先要记住的是我们操作的是session,或者说session的缓存,而不是数据库


1、sesson  脏检查:

                       Transcation tx=session.beginTracsaction();

                       User user=(User)session.get(User.class,1);

                       user.setName("a new name");

                       tx.commit();    这里会执行一个update   ,称为session脏检查

        原理:当一个对象进入session后,session会对其生成一个快照,  当session清理缓存时,进行比对,从而执行sql

2、session 清理缓存的时间点

         a、commit

         b、如果执行查询操作时,session内对象发生变化,会清理缓存,使查询结果与数据库一致

         c、flush


3、对象的四种状态

     临时、持久、删除、游离


4、session的一下方法可以将持久化对象变为游离对象

    a、close();    b evict();不建议    c、clear() ;多用于批量操作


5、session的save方法做了什么?

    a、将save对象放入session缓存,使之变为持久化状态

    b、分配OID

    c、计划执行insert(清理换存时执行)


6、persist()  与 save()

     save立即分配OID,persist可能要等到清理session缓存时才分配

     persist在事务边界外将不计化执行sql,而save的执行insert与事务边界无关

    其他类似


7、get()与load()

      当数据库中不存在与OID对应对象时,load方法throw ObjectNotFoundException    get方法return null

      load()采用lazy=ture  除非显式配置了lazy=false   ,当不适用get方法时,使用load(适用于要删除、或建立该对象与其他对象关系时)

      get() 采用lazy=false ,并忽略对lzay的显式设置,适用于需要访问该对象及其属性的情况


8、session 的update  方法

      将一个游离对象转为持久对象,并    “计划”  执行  一个update   sql

     如果将一个与已经存于session的对象的OID相同的对象放入session 将抛出 NonUniqueException


9、session 的  saveOrUpdate()

    传入的对象如果之前是临时状态,执行insert 如果是游离状态,执行update


10、 cascade 属性

     none : 忽略关联对象,默认

     save-iupdate  :   save() or update()   级联的进行  save or  update

     persist   :   persist() 时 级联

     merge   :  merge()时级联

     delete   :   delete时级联

     lock,replicate,evict,refresh   :  与以上同理

    all :  包含以上,不包含以下

     delete-orphan   : 删除所有和当前对象接触关联关系的对象

   all-delete-orphan   :   包含以上全部