gpt4 book ai didi

java - Hibernate、Persistence 和@OneToMany 和@ManyToOne 注释问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:40:37 27 4
gpt4 key购买 nike

我对@OneToMany 和@ManyToOne 注释有一些问题。

我有两个类 Suite 和 SuiteVersion。 SuiteVersion 依赖于套件。所以我在我的代码中实现了这个:

类(class)套房:

@OneToMany(mappedBy = "suite")
@Cascade(CascadeType.DELETE_ORPHAN)
private List<SuiteVersion> listSuiteVersion = new ArrayList<SuiteVersion>();

类套件版本:

@ManyToOne()
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
private Suite suite;

但是当我删除一个关联了 SuiteVersion 的 Suite 时,我遇到了一些问题。Hibernate 不会删除 Suite 之前的 SuiteVersion。我不知道为什么,因为我在我的代码中提到了这一点:

@Cascade(CascadeType.DELETE_ORPHAN)

这是我删除套件时获得的日志:

Hibernate: delete from SUITE where ID_SUITE=? 13 août 2010 09:40:50 org.hibernate.util.JDBCExceptionReporter logExceptions ATTENTION: SQL Error: -8, SQLState: 23504 13 août 2010 09:40:50 org.hibernate.util.JDBCExceptionReporter logExceptions GRAVE: integrity constraint violation: foreign key no action; FK42895651EA304E6 table: SUITE_VERSION

预先感谢您的帮助。

最好的问候,

佛罗伦萨

P.S:对不起我的英语我是法国人。

最佳答案

But i have some problem when i delete a Suite whose have SuiteVersion associated. Hibernate don't delete SuiteVersion before Suite.

那是因为你没有级联 REMOVE操作来自 SuiteSuiteVersion .要获得所需的结果,您需要这样的东西(假设您使用的是 JPA 1.0):

@OneToMany(mappedBy = "suite", cascade = javax.persistence.CascadeType.REMOVE)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private List<SuiteVersion> listSuiteVersion = new ArrayList<SuiteVersion>();

我在这里使用完全限定名称来清楚地显示 Hibernate 特定的和标准的 JPA 注释。

Hibernate 特定 CascadeType.DELETE_ORPHAN是别的东西,它用来告诉 Hibernate 删除一个特定的 SuiteVersion如果您将它从集合中删除(如果没有它,SuiteVersion 记录将被更新以删除到父级 Suite 的链接,但将保留在表中,因此成为“孤儿”)。

请注意,如果您使用的是 JPA 2.0(即 Hibernate 3.5+),现在有一种处理孤立记录的标准方法,即不使用 Hibernate 特定注释。您可以指定 orphanRemoval OneToMany 中的选项(和 OneToOne )协会。像这样:

@OneToMany(mappedBy = "suite", cascade = CascadeType.REMOVE, orphanRemoval = true)
private List<SuiteVersion> listSuiteVersion = new ArrayList<SuiteVersion>();

但这超出了这个问题,因为这实际上不是您要找的。

关于java - Hibernate、Persistence 和@OneToMany 和@ManyToOne 注释问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3474918/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com