需要明确hibernate二级缓存

man*_*j s 6 java memcached caching hibernate

我需要对Hibernate二级缓存进行一些澄清.

  1. hibernate二级缓存如何工作?

  2. 它是否在Java EE环境中的服务器启动的实体类中加载了表中有@Cacheable注释(关于hibernate注释)的所有数据?

  3. 当这些表有更新时,缓存是否会同步?如何?

  4. 最后一个是有没有办法让我的DAO代码在我感兴趣的某些表上有更新时得到通知?(寻找任何可以与表的更新密切相关的监听器).

JB *_*zet 0

  1. 这是一个太宽泛的问题,无法在这里回答。

  2. 不。它会延迟填充缓存。每次使用 hibernate API 或查询从数据库获取可缓存实体时,该实体都会存储在缓存中。稍后,当session.get()使用缓存中实体的 ID 进行调用时,不需要数据库查询。

  3. 如果更新是通过 Hibernate 进行的,则缓存也会更新。如果使用外部应用程序、SQL 查询、甚至批量更新 HQL 查询完成,则缓存不会意识到更新。这就是为什么您需要小心哪些实体可缓存、您选择哪个生存时间等。有时,返回过时的值没有问题,但有时却是不可接受的。

  4. 不。