jdbcTemplate 更新后如何刷新 entityManager 状态

Posted

技术标签:

【中文标题】jdbcTemplate 更新后如何刷新 entityManager 状态【英文标题】:How to flush entityManager's state after jdbcTemplate update 【发布时间】: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 调用本机查询时,一切正常。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于jdbcTemplate 更新后如何刷新 entityManager 状态的主要内容,如果未能解决你的问题,请参考以下文章

JdbcTemplate 批处理更新问题

更新后如何连续刷新datagridview

更新面板刷新后如何运行一些 javascript?

如何在GWT中更新后刷新网格?

更新表格视图单元格中的核心数据值后如何刷新

ASP如何实现下拉菜单选项选中后直接更新值,但不要刷新网页。 例如:<