0

ユーザーと車の 2 つのオブジェクトがあります。

ユーザーIDの外部キー依存性を持つ休止状態の車オブジェクトを挿入しようとしています。車のユーザーは 1 人なので、1 対 1 の関係を割り当てました。

私の車のマッピングは次のようになります (xml が表示されなかったので < を削除しました):

id name="id" type="int">
    <column name="carId" />
    <generator class="assigned" />
</id>
<property name="carName" type="string"></property>
<one-to-one name="user" class="User"></one-to-one>

私のユーザー マッピングには、id とフィールド名などがあります。

私の車のオブジェクトは次のようになります。

 private int id;
 private String carName;
 private User user;

私の車のテーブルには、userId である外部キーがあります。

挿入しようとすると、SQL エラーが発生します: フィールド 'userId' にはデフォルト値がありません

Hibernate が実行している SQL は次のとおりです。 Hibernate: insert into car (carId, carName) values (?, ?)

ご覧のとおり、userId が欠落しており、必須フィールドです。

userId に基づいて car オブジェクトを挿入し、ユーザーに関連付ける必要があります。私が持っているマッピングはこれを達成していないので、どうすればこれを達成できますか。

ありがとう!

4

1 に答える 1

1

まず第一に、車が 1 人のユーザーに関連付けられているからといって、必ずしも 1 対 1 であるとは限りません。人が車を 1 台しか持てない場合、それは真実です。1 人が複数の車を持つことができる場合、関連付けは多対 1 になります。

次に、関連付けが実際に 1 対 1 であると仮定すると、ドキュメントがそのような関連付けをどのようにマッピングするかを次に示します。

外部キーに対する単方向の 1 対 1 の関連付けは、ほとんど同じです。唯一の違いは、列の一意の制約です。

<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>
    <many-to-one name="address" 
        column="addressId" 
        unique="true"
        not-null="true"/>
</class>
于 2012-12-02T08:15:29.453 に答える