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

时间:2016-02-20 13:03:32

标签: hibernate infinispan second-level-cache

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

我通过主键accountNumber查询帐户实体 - 它被配置为@Cachable。 如果我第一次执行em.find(' AA'),那么hibernate会检查2LC,它会在2LC中丢失,然后执行SQL查询。 DB中没有帐户AA,因此em.find调用返回null。

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

Hibernate是否有可能从第一次执行的查询中保存null,因此在缓存中AA键无效之前不需要另一个SQL?

我使用EAP 6.2.4,Hibernate 4.2.7,Infinispan 5.2.7

1 个答案:

答案 0 :(得分:2)

没有。即使使用Hibernate ORM 5.x,2LC API也不包括这个,并且2LC实现不可能返回实体不能在DB中的任何提示(即使实现可能存在某种类型)墓碑,并知道)。

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