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

Java Hibernate在更新现有父实体时不创建新的子实体,java,hibernate,hibernate-4.x,hibernate-cascade,Java,Hibernate,Hibernate 4.x,Hibernate Cascade,我有一对多的基数关系,如下所示- @Entity @Table(name = "PARENT_TABLE") public class Parent { @Id @GeneratedValue(generator = "uuid2") @GenericGenerator(name = "uuid2", strategy = "uuid2") @Column(name = "PARENT_ID", updatable = false, nullable = fal

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

@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, mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name="PARENT_ID")
    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;

}
创建父对象和新的子对象工作得很好,即使使用JPA级联注释也是如此。这里可以做什么


注意:这是一个到hibernate项目的repo层迁移,所以我试图避免逻辑上的更改,这就是为什么要在现有父级中保存新的子级。我知道,最好先调用save on child。

这不是映射双向关联的方式。阅读手册@JBNizet我没有使用mappedBy,因为我使用的join column不是强制性的,因为在我的例子中,join column name与外键不同。。当使用联接列时,不应给出mapped by。它是必需的。这里有两个不相关的单向关联。一边必须是反面。@JBNizet这里是答案的链接:使用joinColumn,而不使用mappedBy
List<Child> existingChild = getFromDbByParent(parent);
existingChild.add(new Child());
hibernateTemplate.update(parent);
//hibernateTemplate.saveOrUpdate(parent);

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