开发者社区> 问答> 正文

Hibernate在更新现有父实体时不会创建新的子实体

我有一个一对多的关系,如下所示-

@Entity
@Table(name = "PARENT_TABLE")
public class Parent {

    @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "uuid2")
    @Column(name = "PARENT_ID", updatable = false, nullable = false, length = 16)
    @Type(type="uuid-binary")
    private UUID id;

    private String parentName;

    @OneToMany(fetch=FetchType.LAZY)
    @JoinColumn(name="PARENT_ID")
    @Cascade(CascadeType.ALL)
    private List<Child> children;

}

@Entity
@Table(name = "CHILD_TABLE")
public class Child {

    @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "uuid2")
    @Column(name = "CHILD_ID", updatable = false, nullable = false, length = 16)
    @Type(type="uuid-binary")
    private UUID id;

    private String childName;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "PARENT_ID", referencedColumnName = "PARENT_ID")
    private Parent parent;

}

现在,我已经有一个有2个孩子的父母,我有一个对parent的更新调用,它正在更新父母中的一些信息并在父母中添加一个孩子。

List<Child> existingChild = getFromDbByParent(parent);
existingChild.add(new Child());
hibernateTemplate.update(parent);

上面的代码失败了,因为对于第三个孩子,休眠时保存到数据库时不会创建ID。所以,我得到了错误

2019-12-19 13:02:04.589 DEBUG SqlExceptionHelper             io-12347-exec-1 could not execute batch [update CHILD_TABLE set CHILD_ID =null where PARENT_ID=?]

java.sql.BatchUpdateException: ORA-01407: cannot update ("DB"."CHILD_TABLE"."CHILD_ID") to NULL

即使使用JPA Cascade批注,创建父级和新子级也可以正常工作。在这里可以做什么?

注意:这是向休眠项目迁移的回购层,所以我试图避免更改逻辑,这就是为什么要在现有父级中保存新子级。我知道,最好先给孩子省钱。

展开
收起
垚tutu 2019-12-19 16:31:40 495 0
0 条回答
写回答
取消 提交回答
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
继承与功能组合 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载