我有以下情况。
一个业务实体 (BE) 由 2 个线程异步提供的 2 个部分组成。示例:我们的 BE 具有字段 id 和 A、B、C - 都在数据库的一个表中。id 是实体存入数据库时按顺序生成的。B 是唯一字段,在数据库中有限制。Process1 提供字段 A 和 B。Process2 提供字段 B 和 C。因此,在两个过程完成后,我们应该在表格中有一行,所有列都已填写。
使这项工作的好方法是什么?
现在做了什么:
在每个过程中,我们首先从表中选择所有值,其中 B 列中的值是我们现在拥有的值。(如果有的话 - 这意味着其他进程已经保存了它的一部分)。如果有什么东西,它会用缺失的列丰富并持久化。如果什么都没有 - 我们只是坚持我们所拥有的。但是当所有这些都完成时,可能会发生另一个进程完成它的工作,当我们持久化我们的实体时,我们会得到 ConstraintViolationException 和休眠标记事务回滚。并且丢失的列仍然丢失。