ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 15.9\. 根据自然标识查询(Queries by natural identifier) 对大多数查询,包括条件查询而言,因为查询缓存的失效(invalidation)发生得太频繁,查询缓存不是非常高效。然而,有一种特别的查询,可以通过不变的自然键优化缓存的失效算法。在某些应用中,这种类型的查询比较常见。条件查询API对这种用例提供了特别规约。 首先,你应该对你的entity使用`&lt;natural-id&gt;`来映射自然键,然后打开第二级缓存。 ``` <class name="User"> <cache usage="read-write"/> <id name="id"> <generator class="increment"/> </id> <natural-id> <property name="name"/> <property name="org"/> </natural-id> <property name="password"/> </class> ``` 注意,此功能对具有_mutable_自然键的entity并不适用。 然后,打开Hibernate 查询缓存。 现在,我们可以用`Restrictions.naturalId()`来使用更加高效的缓存算法。 ``` session.createCriteria(User.class) .add( Restrictions.naturalId() .set("name", "gavin") .set("org", "hb") ).setCacheable(true) .uniqueResult(); ```