【发布时间】:2021-06-29 10:57:52
【问题描述】:
我使用弹簧数据和休眠。我有一个实体(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);
}
但我希望他发送更新查询,尽管没有任何改变。此外,我希望这种休眠行为只在一个地方(例如,我将创建控制器来执行此数据库更新)。什么是我的问题的解决方案?有什么办法可以解决吗?
【问题讨论】:
-
我不明白,如果没有任何变化,为什么还要运行更新查询?
-
我不明白的是,如果其中一个属性有新的映射逻辑,
findAll和save如何在您的示例中正常工作? -
另外,您使用的是什么数据库迁移工具?例如,Liquibase 允许您创建用 Java 编写的迁移,因此您可以在内部调用自定义逻辑并且仍然之后能够执行 SQL
标签: java hibernate spring-data-jpa