【问题标题】:Persist entity having already exsisting child持久化已经存在子实体的实体
【发布时间】:2017-09-11 15:58:34
【问题描述】:

我正在尝试将新实体 Parent 与 db 中已经存在的子实体持久化。我不想在父母的持久性期间更新孩子,而只想建立关系。当我从前端发送 json 时,它看起来像这样:

{ "child": { "id": 3 } }

保存时我得到了:

org.hibernate.TransientObjectException: 对象引用了一个未保存的对象 瞬态实例 - 在刷新之前保存瞬态实例

@Entity
class Parent {
    @ManyToOne(optional = false)
    @JoinColumn(name = "CHILD_ID", referencedColumnName = "CHILD_ID")
    private Child child;
}

@Entity
class Child {
    @Id
    @Column(name="CHILD_ID")
    private Long id;
}

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:
    @Entity
    class Parent {
        @ManyToOne(optional = false,  cascade = CascadeType.SAVED_UPDATE)
        @JoinColumn(name = "CHILD_ID", referencedColumnName = "CHILD_ID")
        private Child child;
    }
    

    【讨论】:

      【解决方案2】:

      使用 child_id 加载现有的子对象,然后将其注入父对象并保存父对象。

      【讨论】:

      • 我试图避免这种解决方案。
      【解决方案3】:

      你不能。要么使您的 @manyToOne 注释可选属性为 true,要么检索您孩子的代理实例并将其设置为您的父母。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-03
        • 2014-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-03
        • 2011-07-16
        相关资源
        最近更新 更多