0

我有 2 个对象:用户和汽车。

我正在尝试使用具有用户 ID 外键依赖性的休眠插入汽车对象。一辆车只有一个用户,所以我分配了一对一的关系。

我的汽车映射看起来像这样(我删除了 < 因为 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 的汽车对象以将其绑定到用户。我怎么能做到这一点,因为我的映射没有做到这一点。

谢谢!

4

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 回答