• Hibernate持久化对象


    Hibernate对象状态:
    (1),瞬时(Transient)状态
    瞬时状态对象值由new操作符创建,且尚未与Hibernate Session关联的对象(即该对象尚未被Session对象的save()、update()等方法持久化到数据库中去)
    (2),持久(Persistent)状态
    持久状态对象指与数据库表中的某一条记录相对应,已经获取持久化标志符的对象。持久化对象可能是刚刚刚被保存的(save()方法)或者刚刚被加载的(load()方法),无论哪一种情况,它仍存在于相关联的session作用范围内,也就是Session仍然可以对持久对象进行操作。
    (3),脱管(Detached)状态
    脱管状态指在Session作用范围之外的持久对象,与持久对象关联的Session被关闭之后,对象由持久状态变为脱管状态,脱管状态仍然可以被继续修改,如果重新关联到某个新的Session上,会再次转变为持久对象,同时所有修改将被持久化到数据库

    Cat.java

    class Cat
    {
    private Long id;
    private Date birthdate;
    private Color color;
    private char sex;
    private float weight;
    
    }

    Session方法介绍
    1,save()方法,功能是使瞬时状态持久化。
    2,load() 和get()方法,根据某个对象的持久化标志符来获取该对象
      Cat cat=(Cat)session.load(Cat.class.new Long(1));
      Cat cat1 = new Cat();//
      session.load(cat,new Long(1));
    3,update()方法
      使脱管对象持久化。
    4,savaOrUpdate()方法

      既能保存瞬时对象又可更新/重新关联脱管对象。

    5,delete()方法

      从数据库中删除与对象相对应的记录。

      session.delete(cat);

    Session的缓存

      可以理解为一个Hibernate应用中处于持久状态对象的集合,类似于计算机体系结构中的Cache。当Session的load()方法试图从数据库中加载某个对象时,Session首先会判断在缓存中是否已经存在这个对象了,(判断的标准是持久化标志符),如存在就不需要再到数据库中进行检索。

    Sssion的缓存清空是指将缓存内的持久化对象进行清除,持久对象在 缓存清空之后编结束其生命周期,一般在调用Session的close() 、clear()方法进行缓存的清空。

    Session的缓存清理是指每隔一段时间,Session执行一些必需的SQL语句将内存中的对象的状态同步到JDBC连接中,一般默认在调用org.hibernate.Transaction.commit()方法、Session的flush()方法以及执行某些查询时,进行缓存的清理。

    Transaction的commit()方法会首先调用fulsh方法,然后将事务提交。

    持久化对象的级联操作

    cascase这个属性的设置来实现Hibernate中的级联操作。如班级和学生,如果一个班级被删除,与之关联的所有学生对象也删除。

    Hibernate的缓存 

    分为Session的缓存和SessionFactory的缓存。Session的缓存是内置的无法被卸载,通常被称为Hibernate的一级缓存,SessionFactory的缓存分为内置和外置,SessionFactory的内置缓存和Session的缓存在实现方式上比较相似,SessionFactory对象的一些结婚属性包含的数据,存放了映射元素和预定义的SQL语句,其中映射元数据时映射文件中数据的拷贝,预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来的。

    SessionFactory的外置缓存是一个可配置的插件,在默认情况下不启用这个插件,也被称为Hibernate的二级缓存。存储的介质可以是内存或者硬盘。

    持久化层的缓存的范围

    从缓存访问主题的角度来讲,一般会有三类角色会对缓存内的数据进行访问:事务、进程、集群。

    事务是原子的,进程可以有多个事务构成,这些事务可以并发访问数据对象。集群是由一个或多个机器的进程构成,数据对象将被复制到集群环境中的每个进程节点。

    持久化层的缓存的并发访问策略

    在进程范围或集群范围的缓存(二级缓存),会出现并发问题,设定以下四种类型的并发访问策略。每一种策略对应一种事务隔离级别:

    *事务型:“可重复读”的事务隔离级别。在受管理环境中适用。防止脏读和不可重复读这类的并发问题。

    *读写型:“读已提交数据”的事务隔离级别,在非集群环境中使用,对于经常被读但很少修改的数据,可以采用这种隔离类型。防止脏读。

    *非严格读写型:不保证缓存与数据库中数据的一致性。

    *只读型:对于从来不修改的数据。

  • 相关阅读:
    C# Assembly 反射
    C# Assembly 反射
    为C#自定义控件添加自定义事件
    为C#自定义控件添加自定义事件
    redis5.0的槽点迁移,随意玩(单机迁移集群)
    redis5.0的槽点迁移,随意玩(单机迁移集群)
    []MongoDB优化的几点原则
    []MongoDB优化的几点原则
    当MongoDB遇见Spark
    当MongoDB遇见Spark
  • 原文地址:https://www.cnblogs.com/happinessqi/p/3496515.html
Copyright © 2020-2023  润新知