2012-02-28 4 views
2

私たちはプロジェクトでHibernateを使用しています。私の質問は、名前付きクエリに関するものです。名前付きクエリがHibernateによってどのように処理されるかについて、誰かが私を案内できますか? Hibernateがレベル1のキャッシュを使用するように設定されている場合、キャッシュから名前付きクエリの結果も返されますか、それとも常にデータベースにアクセスしますか?Hibernateの名前付きクエリDBまたはキャッシュ?

答えて

2

レベル1のキャッシュは、休止状態のセッションです。非常にまれなケースを除いて、ステートレスセッションが使用される場合を除き、デフォルトではレベル1キャッシュがあります。クエリ結果はレベル1キャッシュにキャッシュされません。私はあなたが「セカンドレベルのキャッシュ」を意味すると思います。

名前付きクエリは、キャッシュに関する名前のないクエリとまったく同じように処理されます。

クエリをキャッシュするかどうかを指定できます。キャッシュされている場合は、データベースへのラウンドトリップを回避できます。キャッシュされているかどうかにかかわらず、セカンドレベルのキャッシュにあるエンティティのインスタンスが返されると、クエリによってIDが返され、エンティティ自体がセカンドレベルのキャッシュからロードされます。

詳細については、Hibernate 2nd level cache in a Grails appおよびthe reference documentationを参照してください。

+0

Thanks Nizet。申し訳ありませんが、私は第2レベルのキャッシュを意味しました。私はもう少し説明しようとします。私はエンティティを持っており、私の名前付きクエリは2つのパラメータに基づいてエンティティを選択しています。したがって、この場合、キャッシュまたはデータベースから選択を休止状態にしますか? – Vivek

+0

キャッシュからは決して選択しません。これはデータベースに送られ、問合せがキャッシュ可能な場合は、その結果が問合せキャッシュに格納されます。同じパラメータを使用して同じクエリを2回実行すると、クエリキャッシュから結果がロードされます。 –

+0

あなたのお手伝いをささげてくださいNizet。 Query_cacheは、毎回データベースに行くクエリ以外にキャッシュを実装するためにはtrueに設定する必要があります。 – Vivek

関連する問題