当数据库中不存在行时如何在 Hibernate 中使用 2LC 而不重复 SQL 查询

How to use 2LC and not repeat SQL query in Hibernate when row doesn't exists in database

Hibernate 二级缓存 (2LC) 可以对数据库中未找到的记录进行缓存吗?

我通过主键 accountNumber 查询 Account 实体 - 它被配置为 @Cachable。 如果我第一次执行 em.find('AA') 那么 hibernate 将检查 2LC,它在 2LC 中丢失然后将执行 SQL 查询。数据库中没有账户 AA 所以 em.find 调用 return null.

如果我在另一个事务中第二次执行 em.find('AA') 那么 hibernate 将再次执行 SQL 查询,即使之前执行过 SQL。

Hibernate 是否有可能从第一次执行的查询中保存空值,这样在 AA 密钥在缓存中失效之前不需要另一个 SQL?

我使用 EAP 6.2.4、Hibernate 4.2.7、Infinispan 5.2.7

没有。即使使用 Hibernate ORM 5.x,2LC API 也不包含此内容,并且 2LC 实现不可能 return 任何提示该实体也不能在 DB 中(即使该实现可能包含某种墓碑并且知道这一点。

由于这有时可能非常有用,请使用功能请求登录 JIRA。