在Java中触发事件

在Java中触发事件,java,mysql,spring-boot,java-8,Java,Mysql,Spring Boot,Java 8,需求是标识实体对象中修改的属性 当与表中先前值的数据进行比较时,如何将请求负载中的修改属性标识为实体对象 注意:我不想将每个属性与表字段进行比较,是否有一种方法可以将完整的实体对象与表字段进行比较 我不想将每个属性与表字段进行比较 所以你不想要样板 然后剩下3个选项 反射 使用Java反射通过成员变量进行迭代(如果模型不是平面的,则需要递归)并进行比较。当我有这个用例时,我从spring的beancopy复制了代码并对其进行了扩展 使用字节码操作 a运行时字节码生成-当应用程序启动时,使用byt

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

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

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

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

所以你不想要样板

然后剩下3个选项

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

  • 使用字节码操作

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

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

  • 不要使用POJO,而是使用
    Map
    您将获得反射的灵活性,但显然,在这里您将失去类型化语言的好处

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

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

    捕到的鱼是

  • 这是一个异步操作

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


  • 发布您的实体类。这张桌子看起来像什么?当你比较时,你希望发生什么?你想要什么样的结果?下次在dragonball z上。预更新/姿势更新注释对您有帮助吗?