我有一个带有版本字段的实体:
@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。或保存方法参数中的旧版本。如何获得在实体脏更改情况下增加的实际版本?我知道在刷新过程中版本发生了变化,但我不能用保存方法刷新。可能是一些其他的变体,以获得实际版本
1条答案
按热度按时间rlcwz9us1#
您可以为此使用
jakarta.transaction.Synchronization
来在事务提交后获取回调。另一种方法是使用HibernateInterceptor
在刷新发生时获取回调。有关详细信息,请参阅Hibernate文档。这里也有一个关于Hibernate interceptors的教程