一级缓存是在事务级别或工作单元级别。hibernate默认启用一级缓存,一级缓存与session关联,如果相同的query在相同的session中执行多次,那么与该query关联的data就会缓存,一级缓存的scope是session。- ~* s1 Q/ _3 W. A+ a l0 z
4 b8 ~" o, a7 R! }& l0 e. Z
如下面代码:
Session session = factory.openSession();* d2 Y) E' M1 ^! l: E$ p
try {& u0 T: @9 h/ K' a# |+ S2 E
Book book1 = (Book) session.get(Book.class, id); 4 k; N% g% j" k. Y
Book book2 = (Book) session.get(Book.class, id);& W2 ~3 r7 c' T
} finally {9 `$ K2 a- x: X: j! e' f
session.close();, ?/ v) i8 q1 v8 Y, Q
}
复制代码
: T0 J5 @' Y d4 B0 V! Y
执行该代码,只会显示一条sql语句。 3 A( g/ A8 J- ]7 f9 T7 Z# g$ \4 [. O . \0 u/ _0 A% U2 @5 S- ^( ^( }7 X& V6 q# o. [' w. s
如果执行下面代码:
Session sess=sf.openSession(); L7 L* z1 p4 o' @& `: F
Book b=(Book) sess.get(Book.class, "PBN123"); 2 C+ G; E- o7 s; m. M0 h