Hibernate CascadeType 问题:更新未级联到子实体

问题描述 投票:0回答:1

在尝试更新与子实体具有一对一关系的父实体时,我遇到了 Hibernate 问题。具体来说,我已经为关系配置了 CascadeType.ALL,但是当我更新父实体时,更改不会级联到关联的子实体。

附加信息:

  • 我使用单独的 Java 模块来执行数据库操作(即,我没有使用 DAO 模型)。
  • 我正确配置了实体之间的双向映射。

javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement

这是我配置实体的方式:

@Entity
public class Parent {

    @Id
    private Long id;

    // Other fields and annotations...

    @OneToOne(mappedBy = "parent", cascade = CascadeType.ALL)
    private Child child;

    // Constructors, getters, and setters...
}

@Entity
public class Child {

    @Id
    private Long id;

    // Other fields and annotations...

    @OneToOne
    @JoinColumn(name = "parent_id")
    private Parent parent;

    // Constructors, getters, and setters...
}

可能导致此问题的原因是什么,如何确保更新反映到父实体和子实体并正确级联?

任何帮助或建议将不胜感激。谢谢!

期望: 我的期望是,由于两个实体是双向映射的,因此当父实体保存到数据库时,子实体也应自动保存。此外,当使用函数 session.saveOrUpdate(parentEntity) 更新现有行时,父实体和子实体都应相应更新。

分析: session.saveOrUpdate(parentEntity) 上面的函数可以很好地创建具有唯一主键的新行。 但是当我想更新同一主键的现有行中的数据时,它会抛出:

hibernate jpa constraints one-to-one cascading
1个回答
0
投票

尝试交换拥有方:

  1. @JoinColumn
    @OneToOne(cascade = CascadeType.ALL)
    放在父类中的Child字段上方
  2. @OneToOne(mappedBy = "child")
    放在 Child 类中的 Parent 字段上方

您是否使用 ddl-auto 创建数据库结构?你能显示表创建脚本吗?

© www.soinside.com 2019 - 2024. All rights reserved.