【问题标题】:Is "update without select" possible with Hibernate/JPA?Hibernate/JPA 是否可以“不选择更新”?
【发布时间】:2018-01-28 07:10:36
【问题描述】:

因此,使用 JPA/Hibernate,您当然可以使用 session.load()entityManager.getReference() 之类的方式加载实体“代理”而无需访问数据库。

但是,如果没有 Hibernate 从数据库初始化代理,似乎不可能在这些“代理”上设置属性。因此,您不能只保留更改的值(通过实体上的@DynamicUpdate)而不进行选择。

我相信这就是它的方式,如果你想要update without select,你必须自己滚动它。如果有人能证明我错了,我会很高兴!我错过了什么吗?

【问题讨论】:

  • 在我看来,真正的问题(也许你也这么想)不是“如何在没有选择的情况下更新”,而是“如何以符合 JPA 理念的方式更新”。我想说,很少有方法存在,但会破坏缓存、会话或@PrePersist java 代码。为了更好地讨论来自docs.jboss.org/hibernate/orm/3.3/reference/en/html/batch.html 的 13.3(请参阅“免责声明”,这是我的思维方式)。好问题,我的“向上”
  • 你能说你找到解决办法了吗?

标签: java sql hibernate jpa


【解决方案1】:

恐怕您是正确的,正如@DynamicUpdate 的 java-doc 中所写: “请注意,对于分离实体的重新附加,如果不启用 select-before-update ,这是不可能的。”

nicolasl 给出的答案对于这种情况是不正确的,如果您希望控制使用 CrudRepository.save() 时是否触发持久化或合并,则需要实现持久化

【讨论】:

    【解决方案2】:

    AFAIK 选择由合并操作执行,其唯一目的是检查实体是否已存在于您的数据库中。如果这是正确的,您可以像他们在文档中所说的那样实施自己的验证:

    Implementing Persistable:如果一个实体实现了 Persistable,Spring Data JPA 将新检测委托给 实体。有关详细信息,请参阅 JavaDoc。

    实现EntityInformation:可以自定义 SimpleJpaRepository 中使用的 EntityInformation 抽象 通过创建 JpaRepositoryFactory 的子类和 相应地覆盖 getEntityInformation(...) 方法。然后是你 必须将 JpaRepositoryFactory 的自定义实现注册为 一个 Spring bean。请注意,这应该很少需要。见 JavaDoc 了解详情。

    (https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.entity-persistence.saving-entites)

    我从来没有实现过这样的东西,但我想你可以试一试......

    希望对你有帮助

    干杯

    尼考

    【讨论】:

      猜你喜欢
      • 2011-11-22
      • 2012-01-15
      • 2011-12-17
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      • 2011-04-06
      相关资源
      最近更新 更多