- - PR -
Hibernateで複合キーを利用したリレーショナルなデータ獲得方法について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-09-02 17:41
現在、Hibernateを利用したアプリケーションを開発していて
リレーショナルなデータアクセスを行う際に ・<many-to-one> 1対多 ・<one-to-many> 多対1 などの定義を利用したいのですが、リファレンスなどには単一キーによる データアクセスの例しかなく(推奨されていないため?)、 キーが複合である場合のアクセス方法が解らず立ち止まってしまいました。 どなたかこのような事象を検証された方がいれば、内容について教えてください。 以下は、データアクセス対象となっているスキーマの例です。 create table Person( personid varchar(10) not null, tourokudate date not null, name varchar(32), address varchar(128), primary key (id,tourokudate) ) create table Sagyou( personid varchar(10) not null, tourokudate date not null, workcode varchar(128), workdate date, primary key (id,tourokudate,workcode,workdate) ) 上記のようなスキーマがあります。 Personは人の履歴を管理していて、Sagyouはその人が実施した作業を管理しています。 このような2つのスキーマでpersonid,tourokudateを外部キーとしたデータアクセスを行いたいのです。 どなたか解る方があればよろしくお願いします。 [ メッセージ編集済み 編集者: 未記入 編集日時 2004-09-02 18:21 ] | ||||||||
|
投稿日時: 2004-09-06 11:23
id要素の代わりに composite-id要素を使えばできます。ただ、複合キーの一部が複合キーを参照しているので、key-many-to-one 要素も必要です。大事なのははCompositeIDというpersonidとtourokudateを一緒にしたキークラスを作る事です。
詳しい内容は英語ですが、 5.1.5. composite-id 7.4. Components as composite identifiers を読むと分かります。 下記のコードを参考にしてください。
ちなみに、PostgreSQLを使った場合SchemaExportで以下のschemaができました。
| ||||||||
|
投稿日時: 2005-08-16 12:34
リレーションというキーワードからは外れますが、複合キー絡みということで、こちらのスレッドに便乗させてください。
例で出てくるPersonsテーブルに対して「personid='001'」のレコードをSelectしようと思ったらどのようなコーディングが必要になるのでしょうか? 複合キーを使っていないテーブルのSelectは簡単に出来たのですが、こちらはHibernateのドキュメントに例が見当たらず四苦八苦しております。出来ればHQL,Criteriaでの例も見てみたいです。 |
1