(学习笔记)Hibernate的一级缓存
1、只读需要加事务么?加事务会不会影响速度了?
???? 锁和不锁区别, 速度上没有影响,建议加事务。
2、hibernate的缓存
???? 一级缓存——Session
???? 二级缓存——Cache Concurrency Strategy、 Query Cache、 Cache Provide
?
一级缓存
1、一级缓存就是Session(Map). 一个session生命长度与事务相对应,他是必要的,不能被关闭,并且他能保证一个事务中id号的(唯一),Map的key就是存放对象的主关键字。
2、无论进行对象的save(),update(), saveOrUpdate(),还是load(), find(), list(), iterate(),filter(),这些对象都会被放进缓存中(key, value),一旦flush方法调用,这些对象的状态将与数据库同步。
3、当你load100000个对象,则可能发生"OutOfMemoryException"异常。我们怎么能够使用Hibernate处理这种大量对象批量处理操作了?我们的观点是ORM不适合处理update、delete批量处理。如果你想进行这类操作,有一种更好的手段:使用数据库的存储过程 或者 直接使用SLQ UPDATE 和 Delete语句。如果你非得要用Hibernate进行大批量操作,一旦操作完成立马执行evict操作,释放缓存。(不要把所有的数据都放入缓存)
4、完成所有对象的evict操作,我们调用Session.clear()方法,一般很少用,但是用的时候,作用很大的。