当前位置: 首页 > 知识库问答 >
问题:

即使实体中没有任何变化,也会更新对DB的请求

万俟丁雷
2023-03-14

我使用spring数据和hibernate。我有一个实体(TestEntity)。我创建了一个自定义hibernate类型,将一个字符串字段反序列化为两列。如果我持久化一个实体,然后对其进行更改,则一切正常,hibernate会发送更新查询(它使我的类型正常工作,而对DB的更新查询会将我的旧列“拆分”为两个新列)。但我的目标是让这项记录成为移民之王。我不能使用普通的DB迁移,因为我的自定义类型中有一些逻辑。我想做这样的东西:

// 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);
}

但我希望他发送更新查询,尽管一切都没有改变。此外,我希望这种Hibernate行为只在一个地方发生(例如,我将创建控制器来执行此DB更新)。我的问题有什么解决方案?有没有办法解决这个问题?

共有1个答案

令狐和裕
2023-03-14

我不明白你为什么需要它,但你需要将实体从会话中分离出来,这样才能工作。

据我所知,您需要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();
   }
   

请参阅Spring JpaRepository-分离和附加实体

 类似资料:
  • 我们有JPA hibernate的spring boot项目。设置非常普通-rest controller-Service-Repository。有一个返回类型为实体的特定endpoint。该服务从db获取实体,进行一些计算,然后将其返回给客户端。问题是,一旦服务调用返回,就会在后端的这个实体上触发一个更新查询。任何实体属性都不会更改。Repository.save()也未被调用,但更新查询仍在进

  • 问题内容: 我有一个包含10个元素的div,这些元素将被逐个更新,延迟时间为2秒。下面是相同的代码 但是,当我运行它时,所有元素都会一起更新。该程序只是添加一个延迟添加一个开始,并且所有元素都一起更新(被标记)。如何制作代码来逐一标记元素? 问题答案: 您正在打破React的两个基本规则: 不要直接改变状态 如果根据现有状态更新状态,请使用回调形式,因为状态更新可能是异步的(无论如何,在您的示例中

  • 我整天都在尝试将实体保存到MySQL数据库中,遇到了巨大的困难。我正在使用NestJS和TypeORM。 教师实体ts app.module.ts 以下是错误: 该实体实际上保存在数据库中,但NestJS需要整整一分钟才能完成此任务并返回响应。我正在使用Angular,它等待这个响应,以便在注册为教师后将用户重定向到登录页面。在发送post请求在数据库中创建教师后,我仅在一分钟内收到状态为500的

  • 我想要一些关于实时监听器定价的解释。 在Firestore文档上(https://firebase.google.com/docs/firestore/pricing)声明如下: 如果侦听器断开连接的时间超过30分钟(例如,如果用户脱机),您将被收取阅读费用,就像您发出了一个全新的查询一样。 如果没有任何更改(无论是本地更改还是远程更改),该怎么办。在30分钟后重新连接时,您是否仍会因阅读而收取费

  • 有什么能帮上忙的吗?有人能解释一下为什么没有对对象进行更改时行不更新吗?:)谢谢!

  • 我正在尝试用liquibase配置简单的maven项目。我在liquibase maven插件和liquibase hibernate4的版本上遇到了很多问题,这些版本不会产生大的堆栈跟踪,但最终我几乎让它工作了。但当我执行mvn liquibase:diff时,它以消息<code>liquibase:未发现任何更改,无需执行</code>结束。 这是我的诗: 并从 记录: 在< code > s