当前位置: 首页 > 知识库问答 >
问题:

hibernate拦截器,用于审核由于调用onSave和afterTransactionComplete的时间差而导致的日志设计问题

龙毅
2023-03-14

我有一个async系统,每当在main系统中创建一个新实体时,它都会做出反应,这个async系统会查询新创建实体的数据库。

async系统创建msgs,我使用hibernate拦截器

因此,每当创建一个新实体时,就会调用拦截器的onSave方法

将实体id保存在列表中,现在当后交易完成(交易发送)完成时

调用时,我使用消息传递系统(ActiveMq)将列表中的所有实体id刷新到async系统。

现在,当有一个以上的事务正在处理时,问题就会出现。。两者都有

事务创建实体。

让我举一个例子:

Tx\u A创建实体EA1、EA2

Tx\u B创建实体EB1、EB2

现在让我们假设执行流是这样发生的:

[1] 在保存EA1时,我将EA1 id添加到flushList中

[2] 在保存EB1时,我将EB1 id添加到flushList中

[3] tx_A的后交易完成(tx)

现在,我将把EA1和EB1id刷新到async系统,该系统在查询数据库时

EB1发现null作为事务Tx_B仍然没有完成。

现在,这个问题可以解决,如果在onSave调用中,我可以获得事务ID,然后在postTransactionComplments中,我可以只刷新与该事务相关的实体

[1] 现在有没有办法获取此事务id?

[2] 对于上述问题是否有其他解决方案?

我正在使用Hibernate4.2。2.


共有1个答案

明阳旭
2023-03-14

只有当我们使用全局范围拦截器时,问题才会出现。

如果我们使用会话范围拦截器,那么对于每个新事务都有一个新的拦截器就没有问题了。

 类似资料:
  • 问题内容: 我的问题是:是否有我可以使用的参考,也许是一本书或诸如决策树之类的东西,我可以参考这些参考来基于一些输入变量来决定应该走的路,例如: 数据库架构的成熟度 如何查询日志 需要重新创建记录的概率 更重要的是:写入或读取性能 所记录的值的性质(字符串,数字,blob) 可用的存储空间 我知道的方法是: 1.添加创建和修改日期及用户的列 表格示例: id value_1 value_2 val

  • 我正在使用Hibernate为一个小项目实现createDate和lastUpdate时间戳。我使用一个EmptyInterceptor,并根据我在这里找到的建议解决方案重载提供的方法。除非有一点细节,否则这个解决方案很好用。我想添加一列,指示对象是否已经更新。我知道我可以通过简单地比较两个创建和更新的时间戳是否有差异来实现这一点,但是我需要有这个字段来指示有一个更新。 我使用onSave方法,在

  • 下面打印的是由于 IP 和 SP 之间的时区差异而导致的身份验证失败问题的堆栈跟踪。有没有办法在Spring安全中对此进行配置? org . open SAML . common . samlexception:响应问题时间太旧或带有未来日期,skew 60,time 2015-06-11t 09:27:49.000 z at org . spring framework . security .

  • 我正在使用Apache CXF开发REST服务。我正在使用Spring3.1注释来连接bean。我编写了一个拦截器,它截取我的REST方法以进行监视。要做到这一点,我必须自动连接作为库添加到项目中的Monitor类@自动连线在这种情况下似乎不起作用,导致NPE。我做错什么了吗? 应用上下文:

  • 问题内容: 我有两个加载同一个类的ClassLoader。因此,显然这些不能互相投射。但是我需要访问在其他ClassLoader中创建的对象。 我可以访问两个ClassLoader。如何在其他课程中使用该对象?我不需要强制转换对象以匹配当前的ClassLoader。 但是问题在于返回的对象的类型为。因此,我必须放弃该对象才能访问某些方法。我怎样才能做到这一点?像下面这样的普通类型转换会导致Clas

  • 我对正则表达式有很多困惑,我正在努力解决它们。这里有以下字符串: 我的两个不同正则表达式,其中我只更改了点的位置: 为什么第一个正则表达式吃最后一个“e”? 这个否定的前瞻性是如何使这个量词不贪婪的?我的意思是为什么它不能使用{end}之外的字符?