【问题标题】:insert object with foreign key with hibernate使用休眠的外键插入对象
【发布时间】:2012-12-02 03:36:42
【问题描述】:

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

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

我的汽车映射看起来像这样(我删除了

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:插入汽车(carId,carName)值(?,?)

如您所见,userId 缺失并且是必填字段。

我需要插入一个基于 userId 的汽车对象以将其绑定到用户。我怎么能做到这一点,因为我的映射没有做到这一点。

谢谢!

【问题讨论】:

    标签: hibernate insert hibernate-mapping


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      相关资源
      最近更新 更多