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

2024-01-12

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

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

entityManager.refreash(employee);

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

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

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

还有其他想法吗?

任何帮助表示赞赏,

Pedro


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

  • 其次,级联在绝对上下文中并不是一件好事——你最好手动解决一些依赖关系。

  • 第三,使用FetchType.LAZY用于收藏!

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Hibernate/JPA 中可选地使用级联 的相关文章

随机推荐