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 状态的主要内容,如果未能解决你的问题,请参考以下文章