脏检查不适用于来自另一个线程的附加实体

时间:2017-02-02 12:31:04

标签: hibernate jpa spring-data spring-transactions

我有以下代码:

completableFuture
    .thenApply(x -> transactionTemplate.execute(s -> {
        repository.save(entity);
        entity.update();
        return entity;
    }));

entity是来自另一个线程的实体,我必须在异步调用后处理它。问题是当我调用entity.update()并且某些数据被更改时,Hibernate不会发出更新查询。如果我在repository.save(entity)之后放置entity.update()一切正常,但对我来说似乎有些奇怪。

在这些情况下不应该进行脏检查吗?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您正尝试通过调用EntityManager将实体附加到当前save。为此,您应该使用从save返回的实体进行所有进一步的工作。

来自documentation

  

保存给定的实体。使用返回的实例进行进一步操作,因为save操作可能已完全更改了实体实例。