在Hibernate中,我们可以打开/关闭多个会话。例如,我们可以
saveOrUpdate(obj1)-它会导致NonUniqueException之所以会发生这种情况,是因为有一些类似于应用程序会话的东西,它存储来自多个常规会话的detached对象。
两个问题:
发布于 2015-09-08 11:24:49
所处理的本质上是持久化上下文,从Hibernate API用户的角度来看,保留这些对象的主要原因是所谓的应用事务。大多数情况下,将有效的Hibernate (和DB)会话保留在操作的全部时间是不实际的,特别是当它涉及到与用户的对话时。完美的例子是一个用户,他已经给出了一个巨大的表单,在那里他可以编辑对象的某些属性。你绝对不想让一个会话在他编辑的整个时间都是开放的。
更广泛地说,拥有持之以恒的上下文对于任何ORM解决方案都是必不可少的。正如在细节中所描述的,这里
持久化缓存从未像会话一样被清除或刷新,出于上述原因,您不应该强迫它这样做。使用lock或saveOrUpdate重新附加实体。如果您必须做一些事情,当然您可以开始克隆对象、重新启动持久性上下文等等,但是这些可能不是干净的解决方案。
https://stackoverflow.com/questions/32455716
复制相似问题