【问题标题】:JPA: merge entity with existing idJPA:将实体与现有 ID 合并
【发布时间】:2012-12-26 01:01:27
【问题描述】:

我正在使用 JPA 2.0 开发一个 Web 应用程序,我会在每个请求时打开和关闭 EntityManager。用户可以创建一个新实体并设置 id-field(该字段有含义,我无法更改表结构)。要存储新实体,我必须使用 EntityManager 的“合并”方法,但是当已经存在具有相同 id 的实体时,它只会被更新。 我是否必须手动检查是否已经存在具有相同 ID 的实体,或者可以以更好的方式完成吗?还是我的方法有其他问题?

【问题讨论】:

  • 为什么“必须使用“合并”方法”?如果实体已经存在,你想做什么?
  • 我无法使用持久化,因为我的实体已分离,因为我在每个请求上创建(并关闭)我的 entitymanager 实例。我想阻止用户在实际想要创建新实体时更新现有实体。
  • 我不需要用户合并,我可以使用持久化 - 不知何故我认为我不能......

标签: java jpa


【解决方案1】:

如果您使用persist 方法,则会为重复的ID 抛出EntityPersistsException

也就是说,从用户的角度来看,越早知道 ID 已被使用越好(最好在字段更新时使用 ajax 检查它)。

【讨论】:

  • 我不能使用持久化,因为我在每个请求上都创建了我的 entitymanager 实例。例如。在第一个请求中,我读取要在表格中显示的实体,在第二个请求中,我存储一个新创建的实体。
  • 为每个请求创建一个新对象。如果我理解正确,您只是在添加新实体,并且不想保留对数据库中已有实体所做的更改。不要使用分离的实体作为存储新值的对象。
  • 我对 JPA 没有太多经验,但是我必须使用合并来附加实体(我已经在做)。也许你可以澄清一下?
  • 谢谢,我以为不行,但我一定有其他问题,它可以!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-17
  • 2014-02-06
  • 2011-09-19
  • 2016-09-17
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多