【问题标题】:Saving collections in Hibernate with Spring使用 Spring 在 Hibernate 中保存集合
【发布时间】:2011-12-19 00:58:31
【问题描述】:

我正在尝试将具有集合的实体保存为也必须保存在数据库中的属性,所以我遇到以下问题:如果我在保存集合之前保存实例,我会收到以下错误:

对象引用了一个未保存的瞬态实例 - 在刷新之前保存瞬态实例:asd.qwe.MyCollection;嵌套异常是 org.hibernate.TransientObjectException: ...

否则,如果我在保存我的实体之前尝试保存集合,或者如果我在list 定义中设置cascade="save-update",我会得到这个:

休眠操作:无法插入:[asd.qwe.MyCollection]; SQL 的未分类 SQLException [插入 entity_collections (fk_entity, field2, field3) 值 (?, ?, ?)]; SQL状态[HY000];错误代码 [1364];字段“fk_entity”没有默认值;嵌套异常是 java.sql.SQLException: Field 'fk_entity' doesn't have a default value

完全正确,因为 'fk_entity' 指的是我尚未保存的实体,并且具有 NOT NULL 限制。

我想知道为什么 Hibernate 会尝试在实际实体之前保存集合?并且.. 是否有可能反转保存顺序?

【问题讨论】:

  • 你能分享你的映射吗?听起来有些不太对劲。如果映射正确,Hibernate 将排序插入以避免违反外键,正如您正确指出的那样。

标签: hibernate spring


【解决方案1】:

您可以在实体的 hbm 文件中配置一对多映射,当您保存实体时,Hibernate 会将 Set 保存到 DB 中。

<set name="your_set" cascade="all">
    <key column="set_contact_column"/>
    <one-to-many class="your_set_class_name" />
</set>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 2017-05-11
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    相关资源
    最近更新 更多