18

Hibernate hbmファイルにオプションの1対1マッピングを作成するにはどうすればよいですか?たとえば、Userテーブルとlast_visited_pa​​geテーブルがあるとします。ユーザーはlast_visitedページを持っている場合と持っていない場合があります。これがhbmファイルの現在の1対1のマッピングです。

ユーザークラス:

<one-to-one name="lastVisitedPage" class="LastVisitedPage" cascade="save-update">

LastVisitedPageクラス:

<one-to-one name="user" class="user" constrained="true" />

上記の例では、最後にアクセスしたページを持たないユーザーを作成することはできません。新しく作成されたユーザーは、まだどのページにもアクセスしていません。hbmマッピングを変更してuserPrefsマッピングをオプションにするにはどうすればよいですか?

4

5 に答える 5

16

私の知る限り、Hibernate はオプションの 1 対 1 ( HHH-2007を参照) をサポートしていないため、代わりに偽のmany-to-onewithを使用する必要がありますnot-null="false"

于 2010-05-06T21:30:59.243 に答える
13

今日は一日のほとんどを同様のことをしようとして過ごし、最終的に次の解決策を見つけました(これが他の人に役立つかもしれない場合に備えて)

@OneToOne
@JoinColumn(name="ClassA_Id", referencedColumnName="ClassB_Id", nullable=true)

誰かの時間を節約するのに役立つことを願っています

于 2011-09-12T01:26:39.230 に答える
7

同様の問題が発生していましたが、注釈を使用していました。グーグルが私をここに連れてきたので、他の誰かが同じ状況にいることに気付いた場合、これは私のために働いた:

http://opensource.atlassian.com/projects/hibernate/browse/ANN-725

アノテーションを使用している場合は、@ NotFound(action = NotFoundAction.IGNORE)アノテーションを使用して、例外が発生しないようにすることができます。コードがnullをチェックしていることを確認してください。これは、現在存在しない可能性があるためです;-)

于 2010-12-22T16:45:15.290 に答える
0

ユーザーが last_visited ページを 1 つしか持っていない場合は、次の 2 つのケースがあります。

(a) 一部のユーザーは last_visited ページを持たず、この場合、last_visited_pa​​ge テーブルにこのユーザーのタプルはありません。(b) 一部の特定のユーザーは last_visited ページを 1 つだけ持っています。 last_visited_pa​​ge テーブルのこのユーザー。

これにより、userid が最終訪問ページ テーブルの候補キーであることが明らかになります。

そして、そのキーを DBMS に宣言する必要があることは明らかです。

于 2010-05-07T00:12:43.503 に答える