Hibernate 二级缓存对 "find by primary key" 以外的任何东西有用吗?

Is Hibernate second level cache useful for anything other than a "find by primary key" ?

据我了解,二级缓存在使用主键查找实体时很有用。

但是将它用于不基于主键的查询有什么意义吗?例如:

SELECT p FROM Person p WHERE p.age > 18 

如果查询缓存打开,二级缓存还有用吗?

不,在那种情况下它没有任何用处。当通过 ID 获取实体或通过 OneToOne 和 ManyToOne 关联导航时(这也会导致实体通过其 ID 加载,除非引用的列不是 PK)时使用 L2 缓存。