美文网首页
Hibernate中session方法

Hibernate中session方法

作者: 暮秋moco | 来源:发表于2020-02-29 16:47 被阅读0次

    1. sesson的CRUD常用方法

    • session.save(实体类) 保存
    • session.get(实体类的字节码文件,变量id)
    • session.update(实体类)
    • session.delete(实体类)
      查询使用query对象来查询
      Query q = session.createQuery(hql)
      hql是hibernate的查询语言 ( from 实体类) 不需要写selcet
      相对于sql语句,在hql语句中 涉及到表中信息的,都使用实体类和类中的属性代替
      List<实体类> 变量 = q.list(); //.list()表示提交操作。例如
    • session.createQuery("from Person").list()

    2. 一级缓存相关方法

    • close() 关闭session,说明session已经不能用了

    • clear() 清除session中的一级缓存,所有缓存在session中的数据全部被清除
      区别:clear()方法session还可以用

    • evict(Object)清除一级缓存中指定的对象

    • refresh(Object) 使用数据库中的数据修改缓存的数据 同时也会修改内存对象 快照是拿缓存中的数据修改数据库 refresh拿数据库中的数据修改缓存

    • flush()手动执行快照机制 默认是在事物提交时执行快照机制

    • save和persist的区别
      共同点:都把临时态变成了持久态
      不同点:
      save方法是hibernate提供的
      persist方法是jpa规范提供的
      jpa规范:java持久化api
      该规范的指定有hibernate作为主导
      但是,由于他是一个规范,任何支持持久化的orm框架都比寻遵循,hibernate也不能例外
      最重要的区别:事物问题
      如果有事物的话,两个都是执行保存(把对象有临时态变成持久态)
      如果没有事物:
      save方法:
      Hibernate3执行保存操作,但是但是由于没有事物,则不会提交。事物会自动回滚
      hibernate5会在一个内置的事物中执行
      persist方法:什么都不会做

    • update和merge
      1.对象从临时态变成永久态
      2.对象从永久态变成托管态
      3.把jvm中的内存对象的值改变
      4.对象从临时态便曾永久态
      5.更新托管态对象报错(因为update方法会先把托管态对象加载到以及缓存中,以及缓冲中已经存在了oid形同的对象)NonUniqueObjectException
      解决办法是用merge方法
      merge会把两个相同oid的对象数据合并 永远是用临时态或者托管态的对象数据改变持久态的
      update时 如果更新的数据。在提交之前被其他程序删除 会报错

    相关文章

      网友评论

          本文标题:Hibernate中session方法

          本文链接:https://www.haomeiwen.com/subject/mgxmhhtx.html