使用hibernate插入带有外键的对象

时间:2012-12-02 03:36:43

标签: hibernate insert hibernate-mapping

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

我正在尝试插入一个具有hibernate的car对象,该对象具有用户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;

我的购物车表有一个用户ID的外键。

当我尝试插入时出现sql错误:字段&#39; userId&#39;没有默认值

hibernate正在做的sql是:       Hibernate:插入car(carId,carName)值(?,?)

正如您所看到的,userId缺失并且是必填字段。

我需要根据userId插入一个car对象,将其绑定到用户。我怎么能实现这一点,因为我的映射没有实现这一点。

谢谢!

1 个答案:

答案 0 :(得分:1)

首先,汽车与一个用户相关联的事实并不一定使它成为一对一。如果一个人只能拥有一辆汽车,那就是真的。一个人可以有几辆车,这种联想是多对一的。

其次,假设这种关联确实是一对一的,这就是the documentation映射这种关联的方式:

  

外键上的单向一对一关联几乎相同。唯一的区别是列唯一约束。

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