3
DB Table REQUEST:
{
   primary key REQUEST_ID,
   String REQUEST_DETAILS
}

DB Table INVALID_REQUEST_DETAILS{
   (foreign key, primary key) fk_req_id references REQUEST.REQUEST_ID,
   String INVALID_COMMENTS,
   String APPROVER_NAME
}

ご覧のとおり、1 つの INVALID_REQUEST_DETAILS に対して 1 つの REQUEST があります。よくわからない何らかの理由で、Hibernate はこれを多対 1 の関係としてマッピングしていると聞きました。.hbm.xml ファイルに次のコードがあります。

<hibernate-mapping>
  <class name="InvalidRequestDetails" table="INVALID_REQUEST_DETAILS">  
  <id name="id" column="fk_req_id">
    <generator class="foreign">
        <param name="property">request</param>
    </generator>
  </id>

  ... (other column mappings omitted) ...    

  <many-to-one name="request" class="Request" unique="true" not-null="true" />
 </class>
</hibernate-mapping>

説明も提供しない限り、「休止状態のドキュメントを読む」ように言わないでください。概念の説明は非常にまばらで、私はすでに読んでいます。私が抱えている問題は、テーブルにレコードを挿入できないため、マッピング ファイルが明らかに間違っていることです。

質問:

  1. .hbm.xml ファイルを修正するにはどうすればよいですか? なんで?
  2. 上で説明したように論理的に 1 対 1 の関係がある場合、なぜ多対 1 のタグが必要なのですか? ここでの多対 1 と 1 対 1 の実際の違いは何ですか? いつどれを使いますか?外部キーが主キーでもなかった場合、何かが変わりますか?
4

1 に答える 1

4

どこから情報を入手したかはわかりませんが、これを 1 対 1 としてモデル化できることは確かです。 方法の例を次に示します。

<hibernate-mapping>
  <class name="InvalidRequestDetails" table="INVALID_REQUEST_DETAILS">  
  <id name="id" column="fk_req_id">
    <generator class="foreign">
        <param name="property">request</param>
    </generator>
  </id>

  ... (other column mappings omitted) ...    

  <one-to-one name="request" class="Request" constrained="true" />
 </class>
</hibernate-mapping>
于 2013-03-07T15:08:42.853 に答える