java - 即使实体中没有任何变化,也更新对 DB 的请求
问题描述
我使用弹簧数据和休眠。我有一个实体(TestEntity)。我制作了一个自定义休眠类型,将一个字符串字段反序列化为两列。如果我持久化一个实体然后更改它,一切正常并且休眠发送更新查询(它使我的类型工作并将更新查询到数据库“拆分”我的旧列到两个新列)。但我的目标是让每张唱片都成为这个迁移之王。我不能使用普通的数据库迁移,因为我的自定义类型中有一些逻辑。我想做这样的事情:
// here I persist all my entities
List<TestEntity> entities = entityRepository.findAll();
for (TestEntity entity : entities) {
// This piece of code does nothing, because when hibernate merges two entities, it understands, that nothing changed, so it won't send update query.
entityRepository.save(entity);
}
但我希望他发送更新查询,尽管没有任何改变。此外,我希望这种休眠行为只在一个地方(例如,我将创建控制器来执行此数据库更新)。什么是我的问题的解决方案?有什么方法可以解决它吗?
解决方案
我不明白你为什么需要它,但你需要将实体从会话中分离出来才能工作。
据我了解,您需要EntityManger
:
@PersistenceContext
private EntityManager entityManager;
...
List<TestEntity> entities = entityRepository.findAll();
for (TestEntity entity : entities) {
entityManager.detach(entity);
entityRepository.save(entity); // or entityManager.unwrap(Session.class).saveOrUpdate();
}
推荐阅读
- python - 用python翻转电影尺寸的最简单方法
- javascript - 更改所有 td 颜色
- python - 如何以图像/超链接格式获得聊天机器人的响应?
- azure - 将自定义标头添加到 Azure Functions 响应
- python - Matplotlib:指示图上的最大值
- android - Recyclerview ListAdapter DiffUtil 未按预期工作
- java - Spring boot 使用 MySQL(Master/Slave) 配置多数据源
- html - 放大导致页脚不增长
- javascript - 如何修复 Javascript 中的“无效密文大小”错误?(aes)
- c# - Linq返回下一行有值的当前行