有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

mysql在Java中触发事件

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

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

注意:我不想将每个属性与表字段进行比较,是否有一种方法可以将完整的实体对象与表字段进行比较


共 (1) 个答案

  1. # 1 楼答案

    I don't want to compare each attribute against the table field

    所以你不想要样板

    还有3个选项

    1. 反思

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

    1. 使用字节码操作

      a.运行时字节码生成-当应用程序启动时,使用bytebuddy/cglib/asm为您生成样板文件

      b.Compiletime字节码生成-扩展lombok,在应用程序编译时为您生成样板文件

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

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

    1. CDC(变更数据捕获)

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

    捕到的是

    1. 这是一个异步操作

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