【问题标题】:What would happen if i created an entity instance using new operator and set its id(PK) manually and then try to persist it(calling EM#persist())?如果我使用 new 运算符创建实体实例并手动设置其 id(PK) 然后尝试持久化它(调用 EM#persist())会发生什么?
【发布时间】:2018-11-06 05:37:53
【问题描述】:

如果我使用 new 运算符创建实体实例并手动设置其 id(PK) 然后尝试持久化它(调用 EntityManager#persist())会发生什么?

您能否详细说明实体状态?

【问题讨论】:

  • 你为什么不自己尝试一下,看看会发生什么?
  • 我已经尝试过这个并得到一个错误:试图保持一个分离的实体,我无法理解为什么 jpa 会抛出这个错误,它不是一个分离的实体

标签: java hibernate jpa persistence


【解决方案1】:

手动为实体分配主键并没有什么特别之处。如果你调用persist,它将进入托管实体状态。在事务结束时,将执行INSERT 查询(如果您之前没有手动刷新EntityManager)。

我建议阅读this 文章以使其更清楚。

【讨论】:

  • 我已经尝试过这个并得到一个错误:试图保持一个分离的实体,我无法理解为什么 jpa 会抛出这个错误,它不是一个分离的实体
  • 听起来您试图保留从数据库中检索到的实体而不是新实例。
  • 实际上,当我尝试发送 json(具有实体 id)并在反序列化对象上调用持久化对象时,该场景是 REST 服务,它试图持久化一个分离实体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-08
相关资源
最近更新 更多