2011-03-22 63 views
4

我的问题很简单,但总体很重要 - 我想。我已经做了几个小时的研究,但没有发现任何有用的东西。使用级联

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

entityManager.refreash(employee); 

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

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

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

还有其他想法吗?

赞赏任何帮助,

佩德罗

回答

1
  • 首先,如果你只有两个或三个字段刷新,使用标准的API。其次,Cascade在绝对上下文中并不是一件好事 - 你最好手动解决一些依赖关系。

  • 三,用FetchType.LAZY对集合!

P.S.不,你不能手动使用级联,因为这个注释在生成你的数据库方案时使用一次。

+0

1.嗯......在这种情况下不是正确的选项,因为这不是一些“手动刷新”,确保它是由我的框架自动机制执行的,所以像“respectCascadesOnRefresh = true/false”这样的选项会有用。标准 - 在这种情况下我看不到它们有用。 2.你可能是对的:) 3.他们不尊重刷新。附:我不使用休眠来生成我的数据库模式。这不仅仅是为了生产“模式”吗? – Pedrop 2011-03-22 14:32:26

+0

3.这并不能解决1-1和* -1的关系。并且:我使用它们:)感谢您的回答! :) – Pedrop 2011-03-22 14:38:42

+0

对不起,我想写:“附言:我不使用Hibernate来生成我的数据库架构是不是它的发展。‘模式’只?”它是。 – Pedrop 2011-03-22 15:15:17