【问题标题】:OneToOne Cannot delete even on Cascade AllOneToOne 即使在 Cascade All 上也无法删除
【发布时间】:2013-02-24 20:42:21
【问题描述】:

我在尝试删除 onetoone 时遇到问题。 所以我想删除与PageImage具有一对一关系的“Page”对象,但如果失败,并告诉这是由于“PAGE_IMAGES__PAGES_FK”而不可能。

现在,我真的不明白这里有什么问题,我正在使用 cascade all。

Hibernate 4.1 + Spring 3.1 + Mysql

@Entity
@Table(name = "PAGES")
public class Page
....
@NotNull
@BatchSize(size = 200)
@OneToOne(mappedBy = "page", fetch = FetchType.LAZY, cascade = CascadeType.ALL, optional = false)
public PageImage getImage() {
    return image;
}
....


@Entity
@Table(name = "PAGE_IMAGES"

@NotNull
    @OneToOne(fetch = FetchType.LAZY, optional = false)
    @JoinColumn(name = "PAGE_ID", nullable = false, updatable = false)
    @ForeignKey(name = "PAGE_IMAGES__PAGES_FK")
    public Page getPage() {
        return page;
    }

entityManager.remove(myPage); 失败并出现异常“约束失败”

【问题讨论】:

  • 删除不必要的关联,在删除时使用 - 级联。
  • 不必要的关联是什么意思? Cascade = All 不应该完成所有工作(也删除 pageImage)吗?谢谢
  • 确保您已在 DB 表上为 ON DELETE 提供级联。

标签: mysql hibernate jpa


【解决方案1】:

在您的映射中,PageImage 是关系的所有者,因为 mappedBy = "page"

因此,您有: 页面有对 pageImage 的引用 pageImage 有对页面的引用

您尝试删除孩子因此例外。如果您尝试删除 pageImage 它很可能会起作用。

【讨论】:

    猜你喜欢
    • 2018-10-19
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    相关资源
    最近更新 更多