开发者社区> 问答> 正文

canal 监听实体类型是 Long 类型,但是数据库值为空(null),然后修改数据库记录后报错,

实体: public class Company { ... @column(value="create_org_id") private Long createOrgId;

... }

数据库信息:

监听类:

提问104.png

然后修改数据库这条记录后,发现并没有进 update 方法,然后追踪代码,发现了问题如下:

提问105.png

当然,我知道,可能大家会说数据库的值不要为空,放个默认值,但是这个表是老的表,里面有很多种这样的字段,而且还有其他的表也要走 canal 监控,如果改表的话相当麻烦且有可能不受控制上线会影响线上环境。

我是准备把这些影响的字段搞成String 去接收,然后传递出去的时候再转化一下。这样搞起来比较麻烦,不知道大家有没有什么好的方案,或者能不能针对这种情况做下优化。

原提问者GitHub用户yeyinzhu321

展开
收起
山海行 2023-04-27 16:18:41 252 0
1 条回答
写回答
取消 提交回答
  • 已解决,通过覆盖同名包来解决的,覆盖的逻辑如下: 修改之前的逻辑是: static Object convertType(Class<?> type, String columnValue) { if (columnValue == null) {//只判断 null,没有判断空 return null; }

    修改后: static Object convertType(Class<?> type, String columnValue) { if (StrUtil.isBlank(columnValue)) {//增加了判断空的逻辑,如果为空也返回 Null return null; }

    原回答者GitHub用户yeyinzhu321

    2023-04-27 22:13:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载