jpa 在事务中实体保存方法调用(实体合并)后获取实际实体版本

pgky5nke  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(111)

我有一个带有版本字段的实体:

@Entity
    public class Cat {
       @Id
       private Long id;

       *************** other fields

        @Version
        private Integer version;
    }

我想在保存repo方法调用后将有关实体的信息发送给broker(这就像发送信息的检查点快照,在一个事务中有几个检查点)。发送到代理意味着将实体的信息持久化到字符串中,然后再持久化到数据库中的代理消息实体。我需要获得此快照消息的实体的实际版本,但我无法获得实际版本(DB + 1版本导致实体编辑)。例如:

@Transactional
public class test(long catId) {
   Cat cat = catRepo.findById(catId);
   cat.setColor(red);
   cat = catRepo.save(cat); // here cat will be with version = 0
   broker.send(cat); // persisting message to DB 4 future sending to broker
   
   cat.setColor(green);
   cat = catRepo.save(cat);
   broker.send(cat); // persisting message to DB 4 future sending to broker
}

但是在保存实体后,我在“merged”对象中有版本= 0。或保存方法参数中的旧版本。如何获得在实体脏更改情况下增加的实际版本?我知道在刷新过程中版本发生了变化,但我不能用保存方法刷新。可能是一些其他的变体,以获得实际版本

rlcwz9us

rlcwz9us1#

您可以为此使用jakarta.transaction.Synchronization来在事务提交后获取回调。另一种方法是使用Hibernate Interceptor在刷新发生时获取回调。有关详细信息,请参阅Hibernate文档。这里也有一个关于Hibernate interceptors的教程

相关问题