gpt4 book ai didi

hibernate - JPA和Hibernate级联之间的混淆

转载 作者:行者123 更新时间:2023-12-03 22:29:10 26 4
gpt4 key购买 nike

我正在使用 Hibernate 3.6 并对我的代码进行注释(而不是使用 hibernate 映射文件)。我遇到了使用与 Hibernate 的 CascadeType 不兼容的 JPA 级联选项的已知“问题”(有关更多信息,请参阅此链接 http://www.mkyong.com/hibernate/cascade-jpa-hibernate-annotation-common-mistake/)。

我希望对这个问题有更多的澄清。我有一些特别的问题:

1)所以@Cascade({CascadeType.SAVE_UPDATE})适用于saveOrUpdate(),但如果我使用merge()或persist(),它也适用吗?还是我必须使用所有三个 Hibernate CascadeTypes?

2) 我如何决定是使用 JPA 级联选项还是使用 Hibernate @Cascade 注释?

2) 在 Hibernate 中有一个针对此问题的“错误”,但开发人员显然认为这是一个文档问题,(我完全不同意他们),而且我没有看到它在所述文档中得到解决。任何人都知道为什么这是“按设计工作”而不是 Hibernate 的 JPA 实现中的错误?

提前谢谢了。

最佳答案

此行为记录在 11.11. Transitive persistence 中。 .

  • Hibernate 级联类型对应于各个操作,因此您需要所有这三个。
  • 在大多数情况下,您需要 CascadeType.ALL或根本没有级联。在这种情况下,JPA 注释就足够了,因为 JPA 的 CascadeType.ALL也涵盖了所有的 Hibernate 操作。否则,如果您需要细粒度的级联控制(并使用 Hibernate 的 Session 接口(interface)),则需要 Hibernate 的 @Cascade .
  • 这不是 JPA 实现中的错误,因为如果您使用 JPA 的 EntityManager一切正常。仅当您将 JPA 注释与 Hibernate 的 Session 结合使用时,才会存在此问题。界面。
  • 关于hibernate - JPA和Hibernate级联之间的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4540806/

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