gpt4 book ai didi

java - 在 Hibernate/JPA 中可选地使用级联

转载 作者:搜寻专家 更新时间:2023-11-01 03:44:31 24 4
gpt4 key购买 nike

我的问题很简单,但总的来说非常重要 - 我认为。我已经研究了几个小时,但没有发现任何有用的东西。

简介:
我有一个名为 Employee 的实体——它是我系统的中心类(比如说它的人力资源管理)。通过写中心,我认为它与其他实体有很多关系。其中有 OneToOne、OneToMany 和 ManyToOne 属性。问题:
在某些情况下,我必须刷新此实体(它还具有基本属性,如“字符串名称;”等)- 在一个 EntityManager 上下文(hibernate Session)中更改它并且必须在其他上下文中刷新之后。我当然可以使用它:

entityManager.refreash(employee);

但是...它也会像“一百”个相关实体一样刷新(提到:1-1、-1、1- 关系),因为这些关系具有注释参数 Cascade.All 或Cascade.REFREASH 为他们。在那种情况下不需要什么——我只在这种情况下使用 Employee 实体本身。什么是不需要的,因为它会影响性能,甚至在本地需要 0.5 秒...
问题:
有没有什么方法可以选择性地“关闭”其属性上的级联来刷新实体。或者也许:是否有任何方法可以使用 Hibernate/JPA 仅刷新实体的特定属性??

当我在这些情况下刷新我的实体时,我真的不希望 Hibernate 触发那些 20 或更长的 SQL 查询,但在其他情况下它是需要的。

换句话说,我会说我需要可以在刷新之前设置的选项,例如“respectCascadesOnRefresh=true/false”。

还有其他想法吗?

感谢任何帮助,

佩德罗

最佳答案

  • 首先,如果您只有两个或三个字段要刷新,请使用 criteria api。

  • 其次,Cascade 在绝对上下文中不是一件好事 - 您最好手动解决一些依赖关系。

  • 第三,集合使用FetchType.LAZY!

附言不,您不能手动使用级联,因为此注释在生成数据库方案时使用一次。

关于java - 在 Hibernate/JPA 中可选地使用级联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5392538/

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