ホームページ  >  記事  >  Java  >  Java での Hibernate の 2 次キャッシュとマルチテーブル クエリの概要

Java での Hibernate の 2 次キャッシュとマルチテーブル クエリの概要

不言
不言転載
2018-12-13 10:01:561437ブラウズ

この記事では、Java での Hibernate の 2 番目のキャッシュとマルチテーブル クエリについて説明します。必要な方は参考にしていただければ幸いです。

Java フレームワークにおける Hibernate に関する 2 つの面接の質問を見てみましょう。これは Hibernate に関する一般的な知識です。

1. Hibernate の 2 次キャッシュを導入してください。

次の考え方に従って質問に答えてください。

(1) まず、明確に説明してください。キャッシュとは何か;

(2) さらに、休止状態のセッションは 1 次キャッシュですが、なぜ 2 次キャッシュが必要なのでしょうか。 ## (3) 最後に、Hibernate の 2 次キャッシュの構成方法について説明します。

キャッシュは、データベースから以前にクエリされて使用されたオブジェクトをメモリ内 (データ構造内) に保存することです。このデータ構造は、通常、オブジェクトが将来使用されるときに、ハッシュマップに似ています。オブジェクトがキャッシュに存在するかどうかをクエリします。存在する場合は、そのオブジェクトをキャッシュに使用します。存在しない場合は、データベースにクエリを実行し、クエリされたオブジェクトを次回使用するためにキャッシュに保存します。以下はキャッシュの疑似コードです。

は Hibernate の 2 次キャッシュにつながり、次の疑似コードを使用してキャッシュの実装原理を分析します。

Dao
{
hashmap map = new map();
User getUser(integer id)
{
User user = map.get(id)
if(user == null)
{
user = session.get(id);
map.put(id,user);
}
return user;
}
}
Dao
{
Cache cache = null
setCache(Cache cache)
{
this.cache = cache
}
User getUser(int id)
{
if(cache!=null)
{
User user = cache.get(id);
if(user ==null)
{
user = session.get(id);
cache.put(id,user);
}
return user;
}
return session.get(id);
}
}

Hibernate のセッションは、通常、Hibernate の第 1 レベルのキャッシュと呼ばれます。セッションを使用してデータベースからオブジェクトをクエリする場合、セッションはまず内部に存在するかどうかを確認します。オブジェクトが存在する場合は直接返され、存在しない場合はデータベースにアクセスし、クエリ結果を内部に保存します。セッションはセッション プロセスを表し、セッションはデータベース接続に関連付けられているため、セッションは通常 1 つのトランザクションでのみ使用され、トランザクションの終了時に閉じられるようにする必要があります。また、Session はスレッドセーフではなく、複数のスレッドで共有すると問題が発生しやすくなります。通常、グローバルな意味でのキャッシュのみが実際のキャッシュ アプリケーションであり、より大きなキャッシュ価値を持ちます。そのため、Hibernate のセッション レベル キャッシュのキャッシュ機能は明確ではなく、アプリケーションの価値は大きくありません。 Hibernate の 2 次キャッシュは、複数のスレッドと複数のトランザクションがこのキャッシュを共有できるように Hibernate のグローバル キャッシュを構成します。私たちが望んでいるのは、ある人がそれを使用すると、他の人もそれを使用できるようになることです。

2 次キャッシュは Hibernate から独立したソフトウェア コンポーネントであり、複数のベンダーや組織が EHCache や OSCache などのキャッシュ製品を提供しています。 Hibernate で 2 番目のキャッシュを使用するには、まず hibernate.cfg.xml 設定ファイルでどのメーカーのキャッシュ製品を使用するかを設定する必要があります。次に、キャッシュ製品独自の設定ファイルを設定する必要があります。 Hibernate のオブジェクトを 2 次キャッシュの管理に含める必要があります。 2 次キャッシュの原理を理解し、この考え方を理解すれば、Hibernate の 2 次キャッシュを構成するのは簡単です。

拡張知識:

SessionFactory は 2 番目のキャッシュに関連付けることができます。つまり、2 番目のキャッシュは、Hibernate の 2 番目のデータベースを使用する場合にのみデータをキャッシュすることができます。 -レベル キャッシュ、注意してください。他のアプリケーションや SessionFactory に現在のデータベース内のデータを変更させないでください。そのため、キャッシュされたデータはデータベース内の実際のデータと不一致になります。 2. Hibernate は複数のテーブルのクエリを実行し、各テーブルから複数のフィールドを取得します。つまり、クエリの結果セットには対応するエンティティ クラスがありません。

解決策 1、Object[] データに従ってデータを取り出し、自分で Bean を形成します


解決策 2、各テーブルの Bean のコンストラクターを作成します。たとえば、テーブル 1 は次のようにする必要があります。 2 つのフィールド 1 とフィールド 2 フィールドを見つけると、Bean(type1 filed1, type2, field2) というコンストラクターがあり、この Bean は HQL で直接生成できます。

以上がJava での Hibernate の 2 次キャッシュとマルチテーブル クエリの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。