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

如何知道什么使休眠的持久对象变脏?

邴俊友
2023-03-14
问题内容

我用hibernate映射的对象具有奇怪的行为。为了知道对象为何表现异常,我需要知道是什么使该对象变脏了。有人可以帮我提示吗?

该对象是Java / Spring上下文中的Java类。因此,我希望针对Java平台的答案。

编辑:我想获得对Hibernate脏状态的访问以及它如何在连接到会话的对象上更改。我不知道一段代码会对您有什么帮助。

至于实际的问题:在由Spring
TransactionManager管理的事务中,我对对象进行一些(读取)查询,并且没有对这些对象进行显式保存,因此它们由TransactionManager保存,因为Hibernate认为其中的一些(不是全部)很脏
现在我需要知道为什么Hibernate认为那些对象是肮脏的。


问题答案:

我会使用拦截器。onFlushDirty方法获取当前状态和先前状态,因此您可以对其进行比较。实现Interceptor接口并扩展EmptyInterceptor,覆盖onFlushDirty。然后使用configuration.setInterceptor添加该类的实例(Spring可能会要求您以不同的方式执行此操作)。您也可以将拦截器添加到会话中,而不是在启动时添加。

这是有关拦截器的文档。



 类似资料:
  • 问题内容: 我对Hibernate还是很陌生,一直在尝试确定它将为您做什么以及需要您做什么。 最重要的是处理一个对象,该对象具有数据库中尚不存在的依赖项。例如,我有一个Project对象,其中包含一个Manufacturer字段,该字段接受Manufacturer对象作为其值。在数据库中,我有一个带mfr_id列的产品表,该列是对Manufacturers表的引用(一种相当典型的单向一对多关系)。

  • 问题内容: 我有一个数据库视图,该视图产生的结果集没有真正的主键。我想使用Hibernate / Persistence将结果集映射到Java对象上。当然,因为没有PK,所以我不能用修饰任何字段。 部署时,Hibernate抱怨缺少该组件。我该如何解决? 问题答案: 如果存在使行唯一的列组合,请围绕列组合建模主键类。如果没有,您基本上就不走运了-但您应该重新检查视图的设计,因为它可能没有意义。 有

  • 问题内容: 休眠中哪些是分离的,持久的和短暂的对象?请举例说明。 问题答案: 甲其不与相关联的永久类的实例,有在数据库中没有表示和没有标识符值被认为是 瞬时 的休眠: 甲 持久 实例具有在数据库中的表示,标识符值,并与一个相关联。您可以通过将瞬态实例与关联来使其 持久化 : 现在,如果我们使用Hibernate ,则持久化实例将成为一个 分离的 实例:它不再附加到实例上(但是仍然可以修改,但是稍后

  • 问题内容: 我有使用获取的持久性hibernate对象 从那以后我改变了它。 我想执行以节省内存,因为我已经完成了该对象。 此处的文档指出,该对象的更改将不会保留。换句话说- 逐出会使我丢失对对象所做的更改。 我可以打电话,但是那会清空所有更改。 在逐出之前,如何保持对单个持久对象所做的更改? 问题答案: 呼叫或,然后您可以根据需要呼叫evict。但是,您必须先刷新会话,然后再执行此操作。出于充分

  • 问题内容: JodaTime有一个提供Hibernate持久性的库。最近,我开始研究Joda-Money,开始了解如何使用hibernate来保持这种状态,而我看不到任何库。 有什么建议么? 问题答案: 好吧,我把你的意见,并炮制了钱的自定义类型为乔达库中的定义,作为参考的人可以看看它在这里,在这里使用和测试自定义类型在这里

  • 问题内容: 如何取消代理hibernate对象,以支持多态? 考虑以下示例。A和B类是两个hibernate实体。B具有两个子类型C和D。 该代码无法执行C或D块,因为B集合已被延迟加载,并且B的所有实例均为Hibernate代理。我想要一种取消代理的方法。 注意:我意识到可以优化查询以急切地获取所有B。我正在寻找替代方案。 问题答案: 这是我们的解决方案,已添加到持久性工具中: