2011-09-26 31 views
1

有没有什么办法,使Hibernate的驱逐既是实体及其所有渴望或一个一对一关联,而不必赶协会手动一个一个? (并且没有在关联上设置cascade =“evict”)。驱逐渴望协会没有级联=“逐出”

我经常发现这些类型的需求一旦持久层是建立和工作,我不觉得有信心在全球范围添加这种配置对于那些关联。我只是想在特定情况下级联驱逐。

此外,如果有办法从数据库中检索实体而没有将它(以及它的热切关联)连接到会话,那就没问题了。

我想这样做到UI改性实体和其当前DB状态之间执行某些比较逻辑。比较逻辑之后,UI修改的实体将始终保存。比较背后的逻辑与渴望或一对一的关联没有任何关系。

回答

2

您的第一个问题的答案是否定的。

我不知道为什么,在你的第二个问题,你不希望有连接到会议的实体。我可以看到为什么你不想加载一些关联,但这正是将关联设置为懒惰而非渴望的目标。只是不要让他们渴望,他们不会被加载到会话中。

+0

感谢您的意见。我不希望我从数据库检索到的实体被附加到会话中,因为我有另一个实体将用于更新。我渴望一对一的关联(并且不支持延迟加载)。无论如何,第一个问题的答案几乎让我清楚,我必须手动驱逐所有关联。 –

+0

只需使用合并而不是更新,一切都会好的。 –

+0

谢谢'merge'会做。我不知道我在想什么。 –

0

写一个新的函数,它在DB直接的比较和返回的东西是什么?

即适合您的需求,我认为。

+0

我不明白这对我提出的问题有什么帮助。我想通过一次调用evict(x)来驱逐一个实体'x'及其所有的一对一关联,并且不用全局地改变与'cascade = evict'的关联。 –

+0

后期加载是一个在getX之后调用的函数,因此您可以在加载后立即驱除收集。 – ssedano

+0

但是,我不应该在'@ Entity'类中注释它吗?我不想在全球范围内做到这一点,我只是想在特定情况下做到这一点。 –