【问题标题】:How to flush entityManager's state after jdbcTemplate updatejdbcTemplate 更新后如何刷新 entityManager 状态
【发布时间】:2021-09-26 01:39:52
【问题描述】:

我有实体,它通过jdbcTemplate 更新和创建:

transactionTemplate.execute {
    myRepository.save(MyEntity(...))
    jdbcTemplate.update("UPDATE my_entity ...")
    entityManager.flush()
}

myRepository.getById(...) // Old version of entity from hibernate cache

但是当我获取更新的实体时,我会从缓存中获取未刷新的版本。这里有什么问题?例如,当我使用 Modifying 调用本机查询时,一切正常。

【问题讨论】:

    标签: spring-boot kotlin jpa spring-data-jpa


    【解决方案1】:

    flush() 将更改从 EntityManager 写入数据库。因此,您很可能希望在不使用 JPA 进行更新之前调用它,例如使用 JdbcTemplate。

    flush() 不会从您似乎感兴趣的EntityManager 的缓存中删除实体。这是由EntityManager.clear() 或EntityManager.detach(Object entity) 为单个实体完成的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 2022-01-18
      • 2011-08-15
      • 2020-05-26
      • 2021-08-08
      相关资源
      最近更新 更多