hibernate必会面试题

   1. iod查询的get和load方法区别

    

  2.Hibernate的主键生成策略

    主键不应该由用户自己维护,应该统一管理,那么Hibernate就提供了主键统一管理的方式:主键生成策略。

        increment                  :自动增长,是Hibernate中提供一种自动增长方式,不是数据库中的自动增长。(适用于short、int、long类型的主键)

                  首先使用select max(cust_id) from cst_customer;将这个最大值+1作为下一条记录的主键。对于并发访问数据库不适用

       identity                      :自动增长,适用于short、int、long类型的主键,使用的是数据库自动增长机制。不是所有数据库都支持自动增长,比如Oracle没有自动增长。

       sequence                   :序列,适用于short、int、long类型的主键,使用序列方式完成主键的生成。必须是支持序列的方式的数据库。Oracle的自动增长

       native                         :本地策略,根据底层的数据库不同,自动选择使用identity还是sequence。

       uuid                            :随机字符串,适用于字符串类型的主键。

       assigned                     :Hibernate不维护主键,开发人员需要手动设置主键。

       总结: 以后如果针对是数值型,选择用native  如果是varchar类型,可以选择用uuid     但是也可以不用hibernate维护,自己在程序中手动设定唯一非空(assigned)uuid

  3.     Hibernate的持久化类的三种状态

      Hibernate框架为了更好管理持久化类,将持久化类分成了三种状态:

         瞬时态     :没有持久化标识OID,没有被session操作管理。

              持久态     :有持久化标识OID,已经被session操作管理。持久态对象更改数据会自动更新数据库。

           脱管态(离线态)       :有持久化标识OID,没有被session操作管理。

    

  4. Hibernate的一、二级缓存

    Hibernate框架本身的性能不是很好,但是Hibernate提供了很多的性能优化的手段,比如,延迟加载 缓存

        Hibernate框架共提供了两个级别的缓存:

        一级缓存:称为Session级别的缓存。因为一级缓存的生命周期与session一致的。自带的,不可卸载的。(由Session中一系列的Java集合构成的)

             事务提交会对比session的存储区和快照区,相同则不更新数据库,不相同则会更新数据库。 

          二级缓存:称为SessionFactory级别的缓存。需要进行配置的缓存的插件。默认不开启的。 ehche==redis

     Ps:   除了删除,增改查和数据库打完交道,都会往一级缓存中留一份

          查询先去一级缓存查,差不到 在去数据库查 查询以后还会放到一级缓存中一份,但是session只要关闭,一级缓存的数据全部清空。

      

  

  

猜你喜欢

转载自www.cnblogs.com/ys828/p/10163354.html