首页 > 代码库 > Hibernate框架2

Hibernate框架2

1.主键的生成策略

hibenrate负责生成主键:uuid永不重复(企业用的多随机字符串)
数据库底层负责生成主键:native(自动判断使用identity还是sequence)
                                                identity(数据库底层采用自增方式生成主键:mysql支持)技术分享
 
                                                sequence(数据库底层采用序列生成主键:oracle支持)

2.持久化类的编写规则(session操作的实例类的编写规则)

就是生成javabean(更具体)
补充:
1.持久化属性尽可能使用包装类  (如int默认0 不知道是不是复制 而类默认null直接判断是不是复制)
2.实体要有一个oid与表的主键对应(数据中有值的oid)
3.实体类不要使用final修饰 (无法生成代理对象)

3.持久化对象的三种状态

  session操作的真正的实体对象
能辨别持久太对象:
       瞬时态:没有oid(表中oid有具体值) 与session没有关联
直接获得瞬时态的对象:new
瞬时态--->持久态:save() saveOrUpdate()
瞬时态--->脱管态:setOid(主键值)
持久态:有oid 与sesssion关联(session调用除了close外的方法)
直接获得持久态的对象:get/load
持久态--->瞬时态:delete()
持久态--->脱管态:colse()
脱管态:有oid 与session没有关联(session调用了close())
直接获得脱管态的对象:不能
脱管态--->瞬时态:setOid(null);
脱管态--->持久态:update()  saveOrUpdate()
       session只是与session无关 但是里面方法还是能直接用(session是会话对象不会随着close()关闭而不能调用对象封装好的访法)
        技术分享
 
持久太 有自动发送sql的能力(自动更新数据库的能力)
save就是insert 
transaction.commit():先发送sql  再提交事务(就是执行sql语句 更新数据库的功能)提交就是更新
4.一级缓存
缓存 就是用时间换空间(就是 将内容存到内存 因为比起查磁盘其更快  关系性数据都是放到磁盘里)

客户端 →服务器端→数据库   服务器端判断缓存中有没有数据然后操作

hibenrate  一级缓存 session中  默认存在
                 二级缓存 sessionfactory 默认不存在 需要自己配置 (外置缓存 (需要导包) 慢慢被redis替代 )
一级缓存为什么可以自动更新数据库(有自动发送sql语句的功能)?
session有快照机制  (快照就是session里面创造了一份对象副本)
发不发sql 有没有快照   
有缓存(缓存里面有对应的那一个对象   如果创建就发送sql 新的快照)就不发sql 
存入数据库就发送sql 更新快照

存进数据库就有快照区   如save 插入  submit就是个更新的功能发送sql

5.事务(面试重点)
acid  面试:
原子性(Atomic):表示将事务中所做的操作捆绑成一个不可分割的单元,即对事务所进
行的数据修改等操作,要么全部执行,要么全都不执行。
一致性(Consistency):表示事务完成时,必须使所有的数据都保持一致状态。
隔离性:理想状态 各个事务操作互不影响
持久性:事务已提交 数据就永久性存到数据库磁盘

2.并发问题
脏读:一个事务读取到另一个尚未提交的数据
不可重读:一个事物中两次读取的数据内容不一致(就是事务未提交之前数据不变)
幻读/虚读:一个事物中两次数据的条数不一致

3.通过设置数据的隔离级别


null


Hibernate框架2