English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

hibernateの急速ロード問題(多重外部キー関連)について簡単に説明

データベースの構造は以下の通りです

strategyには外部キーmember_id(memberテーブルに関連)と外部キーstrategy_category(categoryテーブルに関連)があります。また、memberテーブルには外部キーposition_id(positonsテーブルに関連)があります

もしフロントページが直接stategyテーブルの内容をクエリする場合、私たちのHQLクエリはこのように書かれます

Stringhql="FromStrategywhereid=:id";

コンソールは「nosession」エラーを報告します。これは、hibernateのデフォルトの遅延読み込みが、必要なときにのみ関連オブジェクトを読み込むため、私たちのフロントエンドが関連オブジェクトの属性を取得する際にセッションが閉じられたためです。

それでは、どのように解決しますか?

ここでは、leftjoinfetchを使用してオブジェクトを読み込むことを推奨します。アノテーション内のデフォルトの遅延読み込みを急速読み込みに変更することで、効率が非常に低くなるためです。

以下の文

Strategystrategy=(Strategy)sessionFactoryUtil.getSession()
.createQuery("FromStrategysleftjoinfetchs.strategyCategoryleftjoinfetchs.memberleftjoinfetchs.member.positionswheres.id=:id")
.setInteger("id",id).uniqueResult();

ここには注意すべき点が2つあります。まず、関連するmemberテーブルがpositionsテーブルにまた関連しているため、それも読み込む必要があります。次に、ここでのs.idは以下のように書かれる必要があります。ここでは、各テーブルの主キー名がすべてidであるため、明示しないとシステムが識別できない場合があります。

まとめ

これで、この記事の「hibernateの緊急読み込み問題(多重外鍵関連)」に関するすべての内容が終わります。皆さんに役立つことを願っています。興味を持たれた方、他の関連する特集もご覧ください。不十分な点があれば、コメントをお願いします。皆様のサポートに感謝します。

声明:この記事の内容はインターネットから取得しており、著作権者に帰属します。インターネットユーザーにより自発的に提供された内容であり、このサイトは所有権を持ちません。人工的な編集は行われていません。また、関連する法的責任も負いません。著作権侵害を疑う内容があれば、メールを送信してください:notice#oldtoolbag.com(メールを送信する際には、#を@に置き換えてください。届出を行い、関連する証拠を提供してください。一旦確認がとりついたら、このサイトは即座に侵害を疑われるコンテンツを削除します。)

基礎教程
おすすめ