15.9. 自然識別子によるクエリ
criteria クエリなど多くのクエリにとって、クエリキャッシュは効率があまりよくありません。なぜなら、クエリキャッシュが過剰なほど頻繁に無効になるためです。しかしながら、キャッシュを無効にするアルゴリズムを最適化できる特別なクエリの種類が1つあります。それは、更新されない自然キーによる検索です。いくつかのアプリケーションでは、この種類のクエリが頻繁に現れます。このユースケースに対し、criteria API は特別な対策を提供します。
最初に、
<natural-id> を使って、エンティティの自然キーをマップしてください。そして、二次キャッシュを有効にします。
<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>
この機能は、可変の 自然キーを持つエンティティと使用するために設計されたいません。
Hiberbate クエリキャッシュを有効にすると、
Restrictions.naturalId() により、より効率的なキャッシュアルゴリズムを使用できます。
session.createCriteria(User.class)
.add( Restrictions.naturalId()
.set("name", "gavin")
.set("org", "hb")
).setCacheable(true)
.uniqueResult();