0

(括弧内の暴言:) 私は Hibernate の初心者で、SQL で 15 秒で記述できる単純な結合のオーバーヘッドに少し不満を感じています。(暴言終了)

したがって、状況は次のとおりです。同じ複合主キーを含む 2 つのテーブルがあります。両方のテーブルの列を「ID」と「バージョン」と呼びましょう。両方のテーブルから特定の ID/バージョンに関するデータが必要なので、

select a.xxx, b.yyy 
from tableA a, tableB b
where a.ID = b.ID
    and a.Version = b.Version
    and .....

悪いテーブルのデザインですが、私の手にはありません。

Hibernate では、私のオンライン調査では、テーブルで共有される別の複合キー クラスを作成し、A オブジェクトに B オブジェクトを含め、A の hbm ファイルでそれらの間を 1 対 1 でマッピングすることを提案しています。

私のプロジェクトでは、すべての Hibernate データ オブジェクトが hbm ファイルで生成され、同じ場所に配置されています。したがって、hbm ファイルを使用してこの複合キー オブジェクトを作成し、その兄弟と共に保存できるかどうかを知りたいです。問題は、特定のテーブルにマップされないことです (または、2 つのテーブルにマップされると言えます)。この複合キー クラスを hbm ファイルで作成できるかどうか、また作成することが望ましいかどうかを判断しようとしています。私はこれについて間違った方法で進んでいますか?

前もって感謝します。

4

1 に答える 1

1

この重要なオブジェクトを誤解していると思います。この場合、ID とバージョンで構成される、このキーを表す Java クラスを作成する必要があります。次に、このクラスを複合主キー タイプとして使用します。このクラスについては、データベースに何も表示されません。インスタンスを識別するために、ユーザーと休止状態で使用されます。

主キーの同期には、1 対 1 の関係が使用されます。一方のオブジェクトは他方を参照する必要があり、そこから独自の主キーを取得します。

ドキュメンテーション:

SQL から Hibernate に切り替えるほとんどの人は、SQL と同じように Hibernate を操作しようとするため、不満を感じています。その場合、彼らはそれから恩恵を受けることはありませんが、追加のオーバーヘッドが発生します。

だからここで私の短いアドバイス:もうテーブルで考えるべきではありません. マッピング ファイルを作成している場合を除き、tables は忘れてください。クラス、オブジェクト、およびオブジェクト指向構造だけを考えてください。「データベースで実行」したいすべてのクエリを実行しないでください。ほとんどのトランザクションでは、最初に 1 つのクエリを実行し、次に遅延読み込み (コードでは認識されません) を使用してプロパティをナビゲートします。実際のロジックを実装するコードは、データベースについて何も知りません。その後、休止状態での作業が楽しくなり始めます。

于 2010-07-15T13:13:22.833 に答える