Hibernate学习总结(三)

1、持久化类(实体类)编写规则:

  • 持久化类要提供无参构造器,因为hibernate底层是通过反射调用该类的无参构造来进行实例化的。
  • 持久化类的属性需要私有化,对私有属性提供公有的get、set方法,因为hibernate底层会将数据进行封装。
  • 持久化类的属性尽量使用包装类。
  • 持久化类要有一个唯一标识id与表的主键对应。
  • 持久类尽量不要使用final进行修饰,因为hibernate中有延迟加载的机制,这个机制中会产生代理对象,hibernate产生代理对象使用的是字节码的增强技术完成的,其实就是产生了一个当前类的子类对象实现的。如果使用final修饰类,就不能产生子类,那么延迟加载策略(一种优化手段)就是会失效。

2、主键生成策略:

        首先得了解自然主键代理主键

        自然主键:把具有业务含义得字段作为主键,例如身份证号(唯一且不为null)。

        代理主键:即把不具有业务含义得字段作为主键,例如UUID。

        下图描述了常用的主键生成策略:


3、持久化对象的三种状态(重点

  1. 瞬时态:瞬时态也称为临时态或自由态,瞬时态的实例是由对象new命令创建、开辟内存空间的对象,不存在持久化标识id(相当于主键值),尚未与Hibernate Session关联。
  2. 持久态:持久态的对象存在持久化标识id,加入到了Session缓存中,并且相关联的Session没有关闭,在数据库中有对应记录,每条记录只对应唯一的持久化对象,需要注意的是,持久化对象是在事务还未提交之前。
  3. 脱管态:当持久化对象与Session的关联被关闭时就转为脱管态。脱管态的对象存在持久化标识id,并且仍然与数据库中的数据存在关联,只是失去了与当前Session的关联,脱管态对象状态改变时Hibernate不能检测到。

    我们可以通过下图简单了解持久化对象的三种状态:


4、持久化三种状态的转换

5、持久化对象能自动更新到数据库

 

    由上可得在没有调用session.update()情况下提交数据后自动更新到了数据库。

6、Hibernate的一级缓存

        缓存: 为了提高效率.
一级缓存:为了提高效率.session对象中有一个可以存放对象的集合。

查询时: 第一次查询时.会将对象放入缓存.再次查询时,会返回缓存中的.不再查询数据库。

修改时: 会使用快照对比修改前和后对象的属性区别.只执行一次修改。

6、Hibernate的事务控制

        1>如何配置数据库隔离级别
1 读未提交
2 读已提交
4 可重复读
8 串行化
2>指定session与当前线程绑定

hibernate.current_session_context_class thread


猜你喜欢

转载自blog.csdn.net/qq_34170352/article/details/80204110
今日推荐