多线程之下调用service.save(),如何是保证框架仍能正确写入默认的字段?

Blade 未结 2 11

一、该问题的重现步骤是什么?

1.  对象A的service,多线程如

parallelStream
异步Future

结合使用:
staffVOList.parallelStream().forEach(staffVO -> staffService.save(staffvo));

2. 问题是,发现存进入的数据对象中,只有一个记录的9个默认字段有值,

  `id` bigint NOT NULL COMMENT '主键',

  `tenant_id` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '000000' COMMENT '租户ID',

  `create_user` bigint DEFAULT NULL COMMENT '创建人',

  `create_dept` bigint DEFAULT NULL COMMENT '创建部门',

  `create_time` datetime DEFAULT NULL COMMENT '创建时间',

  `update_user` bigint DEFAULT NULL COMMENT '修改人',

  `update_time` datetime DEFAULT NULL COMMENT '修改时间',

  `status` int DEFAULT NULL COMMENT '状态',

  `is_deleted` int DEFAULT '0' COMMENT '是否已删除',

其余的 create_dept、create_user、update_user,都没有值

3.


二、你期待的结果是什么?实际看到的又是什么?

希望多线程里执行save,9个表的默认字段被框架写入值,无需人工自己额外写


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

4.7


四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

2条回答
  • 这些字段是从request里获取的,如果异步就获取不到request也就无法获得数据。

    你可以在save之前获取好数据写入entity后再进异步操作。

    0 讨论(0)
  • 55分钟前

    层层传递,太麻烦了

    0 讨论(0)
提交回复