当前位置: 首页 > 面试题库 >

Hibernate:无法将数据库状态与会话同步

穆季萌
2023-03-14
问题内容

尝试将新条目插入到“多对多”关联表时,出现此错误:Could not synchronize database state with session我可以理解,这是与getSession()和session.close()处理的事情

但我无法弄清楚。对于每笔交易,我都会创建一个新会话。但是我在用户注销时关闭了所有会话。即:创建一个hibernate会话并将其与HttpSession绑定。然后我在用户注销中销毁它。

处理此问题后,有时会a different object with the same identifier value was already associated with the session:出现错误。

由于未正确打开和关闭会话,所有这些错误即将到来。

您更喜欢使用哪种方法打开和关闭会话。我的项目是创建一个Web应用程序。该Web应用程序中的每一步动作都与DB有关。

有什么建议么!!!


问题答案:

具有相同标识符值的另一个对象已与该会话相关联

Hibernate跟踪会话中处理的映射对象,因此它可以检测到对这些对象所做的任何更改,并在提交事务时将它们写回到数据库中。如果允许您将具有相同数据库标识符对象的不同对象添加到会话中,那么应该写入哪个对象的状态将是不确定的。

hibernate参考手册中的对象操作详细说明了这一点(以及解决方法)。特别感兴趣的是标题为“修改分离的对象”的部分,但是也需要阅读介绍以了解所使用的术语。



 类似资料:
  • 需要一些帮助!!我对Drools中的有状态和无状态会话没有清晰的理解。我正在努力理解这一点,所以尝试了一个例子。 我在drools6.5版本上使用有状态和无状态会话测试了下面的drl,在这两种情况下都得到了相同的输出。根据我对无状态会话的理解,它应该只执行第一条规则,当应用程序对象在第一条规则中被修改时,第二条规则不应该被激活(“有效期”)。附加源代码。感谢您在这方面的帮助。

  • Drools中无状态会话和有状态会话的区别是什么。我浏览了不同的文件,发现下面 无状态会话执行规则时事实的任何更改都不会被规则引擎察觉,因此如果任何规则被修改,则不会发生其他规则的重新激活。 我试图执行下面的规则,发现了相同的结果

  • 我是EJB的新手,最近开始研究EJB(3.0)。我已经使用Java6年了,但以前从未使用过EJB。至少可以说,整个EJB业务的复杂性让我不知所措。我不明白我可以在哪里实际应用一些概念。 在理解无状态会话bean后,我想到的一个问题是,你能不能不要总是用一个没有本地成员的类的共享实例来替换无状态会话bean(实际上使其无状态)?我了解到正在为无状态会话bean进行实例池。如果没有状态,就不能简单地使

  • 我正在尝试使用Spring和DBunit测试我的代码(http://springtestdbunit.github.io/) 一旦进入单元测试: 将返回DBUnit插入的实体列表,因此它确实在数据库(MYSQL)中插入了记录。 但是: 将返回false!它无法使用无状态会话找到任何记录。 之前,我使用Liquibase插入相同的记录,这段代码工作得很好。 使用HSql更糟糕的是,它在尝试打开无状态

  • 对于有状态会话bean(SFSB)和无状态会话bean(SLSB)的用法,我有点困惑。 我知道SFSB与客户保持状态。这很有帮助:什么时候使用有状态会话bean而不是无状态会话bean? 这里和许多其他地方提供的示例是SFSB的购物车。 “如果一个任务需要一系列方法调用(不止一次),并且您需要保留以前的结果以在下一次调用中使用它们,那么就可以使用SFSB”--Source。这将更像是签出(页面之间

  • 问题内容: 我希望更改为在我的Web应用程序中实现无状态Spring Security的目的是结束,但事实并非如此。 进行了此更改后,由于(根据我的假设)Spring安全性在会话中不存储任何内容,并且无法对安全的Web请求进行身份验证,因此Spring安全性似乎无法正常工作。 我如何利用此无状态功能? 我似乎尚未找到任何有关如何为无状态Web应用程序实现无状态Spring安全的示例。 谢谢 ! 问