获取session异常(获取session异常)
内容大纲引题对象关系映射是一种为了解决面向对象与关系数据库存在的互不匹配的现象的规范,简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。和对象的状态有关系。因此按照默认的方式,提交事务的时候发送SQL问题三解答:通过get查询操作得到的对象处于持久化状态。介绍一级缓存之前,我们先回顾一下Session。存放当前工作单元加载的对象。第二类丢失
内容大纲引题对象关系映射是一种为了解决面向对象与关系数据库存在的互不匹配的现象的规范,简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。和对象的状态有关系。因此按照默认的方式,提交事务的时候发送SQL问题三解答:通过get查询操作得到的对象处于持久化状态。介绍一级缓存之前,我们先回顾一下Session。存放当前工作单元加载的对象。第二类丢失更新问题然而解决的办法有两个,一个称之为悲观锁,一个称之为乐观锁。
内容大纲 引题 对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的规范,简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。 面向对象概念面向关系概念类表对象表的行(记录)属性表的列(字段) ORM框架在前后端领域都能看到它的影子,比如Android的greenDAO、iOS的coreData、Node.js的mongoose,这里主要讲解Java中Hibernate我们比较容易忽略和重要的点。 save和get的执行流程 save和get save: get: get和load方法的区别 先看这段简单的测试代码: 持久化对象的生命周期 为什么需要关注持久化对象的生命周期?那我们来回忆使用Hibernate中是否遇到的三个问题: 那么SQL的执行时机和什么有关系呢?和对象的状态有关系。那持久化对象的状态有哪一些?怎么划分的? 划分的规则:: 状态描述特点临时状态/瞬时态(transient)刚刚用new语句创建,没有被持久化,不处于session中没有oid,不在session当中持久化状态(persistent)已经被持久化,加入到session的缓存中有oid,在session当中游离状态(detached)/脱管态已经被持久化,但不处于session中有oid,不在session当中删除状态(removed)对象有关联的ID,并且在session管理下,但是已经计划被删除有oid,在session当中,最终的效果是被删除. 持久化对象的状态 对象状态的总结 session中的方法仅仅只是改变对象的状态,不负责发送SQL/默认情况下事务提交的时候发送SQL,那么之前是三个问题就可以迎刃而解了。 二级缓存 要了解二级缓存,我们就必须知道一级缓存是什么。介绍一级缓存之前,我们先回顾一下Session。 session 原理如图: 一级缓存 虽然一级缓存可以提高性能,但是由于session的作用域有限,因此,提高的性能也是非常有限的,所以这就引出了二级缓存的概念: 二级缓存 若想了解Hibernate和Mybatis的缓存对比可以戳这里《Hibernate和Mybaitis缓存》(http://www.jianshu.com/p/fe4d82c8c97c) 事务并发问题 事务并发时,会产生两类丢失更新问题,如图: 第一类丢失更新问题 第二类丢失更新问题 然而解决的办法有两个,一个称之为悲观锁,一个称之为乐观锁。 悲观锁(Pessimistic Lock):悲观地认为每次自己去拿数据的时候别人会修改数据,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。底层采用的就是SELECT ..... FOR UPDATE 悲观锁 乐观锁(Optimistic Lock):乐观地认为每次去拿数据的时候别人不会修改数据,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。 乐观锁 在Hibernate中使用乐观锁,推荐使用version方式: