【问题标题】:Trigger a Event in Java在 Java 中触发事件
【发布时间】:2020-04-08 13:57:33
【问题描述】:

要求是识别实体对象中的修改属性。

在与表中前一个值的数据进行比较时,如何将请求负载中的修改属性识别为实体对象。

注意:我不想将每个属性与表字段进行比较,有没有办法可以将完整的实体对象与表字段进行比较。

【问题讨论】:

  • 发布您的实体类。桌子长什么样?当你比较时你想发生什么?你在寻找什么样的结果?下次来龙珠Z。
  • 更新前/更新后注释对您有帮助吗?

标签: java mysql spring-boot java-8


【解决方案1】:

我不想将每个属性与表格字段进行比较

所以你不需要样板。

那么就剩下3个选项了。

  1. 反射

使用 Java 反射来迭代(如果您的模型不平坦,则需要递归)通过您的成员变量并进行比较。当我有了这个用例时,我从 spring 的 beancopy 中复制了代码并对其进行了扩展。

  1. 使用字节码操作

    一个。 Runtime 字节码生成 - 在应用启动时使用 bytebuddy/cglib/asm 为您生成样板文件

    b. Compiletime 字节码生成 - 扩展 lombok 以在您的应用编译时为您生成样板

  2. 不要使用 POJO,而是使用 Map<String,Object> 您将获得反射的灵活性,但显然,您将失去类型语言的好处。

还有另一种选择,但这涉及将事件生成责任从应用程序代码转移到数据库端。

  1. CDC(变更数据捕获)

如果您使用支持更改数据传播的数据库,则可以将您的应用程序与此职责分离。

关键是,

  1. 这是一个异步操作

  2. 更改数据信息取决于您选择的数据库。旧值可能存在也可能不存在。如果旧值不存在,那么它再次需要另一种策略来确定发生了什么变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 2012-01-24
    • 2013-06-04
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    相关资源
    最近更新 更多