【问题标题】:Retrieve an object and save as new one with Hibernate/Spring Data JPA使用 Hibernate/Spring Data JPA 检索对象并另存为新对象
【发布时间】:2018-04-09 09:18:49
【问题描述】:

在其中一项服务中,我们执行一些操作:

  1. 更新表 A - 使用带注释的查询调用方法,来自存储库的方法,该方法扩展了 JpaRepository。
  2. 从表 B 中选择 (repository.findOne(B_PK))
  3. 从第 2 点修改检索到的对象
  4. 将修改后的对象保存为新实体 (repository.save(B_Object))

不幸的是,我们收到一个错误:“B_Object 实例的标识符从 X 更改为 Z”。 我们应该如何以正确的方式做到这一点??

【问题讨论】:

  • 最简单的方法可能是添加一个复制构造函数。
  • 但是我们的对象很大,所以看起来不太好......
  • 所以首先重构你的数据库,这可能会提高性能吗?我怀疑您复制了很多可以规范化的列。

标签: java hibernate jpa spring-data


【解决方案1】:

在更改和存储新实体之前,您应该分离在第 2 点获取的对象。

【讨论】:

    【解决方案2】:

    从对象中删除唯一标识符(如果它是自动生成的)

    如果没有自动生成键,则需要删除复合键的约束。

    【讨论】:

    • 该列有一列作为主键,ID由序列和触发器生成。不幸的是,当我在实体对象上添加正确的生成时,它仍然不起作用。我还需要应用 chrylis 建议的复制构造函数,但它很难看,因为我们的对象太大了...
    猜你喜欢
    • 1970-01-01
    • 2013-04-21
    • 2019-10-05
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    相关资源
    最近更新 更多