gpt4 book ai didi

java - 我可以覆盖生成的 ID 吗?

转载 作者:行者123 更新时间:2023-11-30 09:52:50 24 4
gpt4 key购买 nike

我使用的是 JPA 1、Hibernate 和 Oracle 10.2.0,我的实体定义如下:

@Entity
@Table(name="TERMS")
public class Term implements Serializable {
@Id
@GenericGenerator(name = "generator", strategy = "guid", parameters = {})
@GeneratedValue(generator = "generator")
@Column(name="TERM_ID")
private String termId;
}

我遇到这样一种情况,实体(和子实体)的 XML 表示将通过 Web 服务进入以更新/替换现有实体。我的想法是只删除旧的并从传入的 XML 中重新创建它。

但是,当我的实体具有现有 ID 时执行持久化似乎会使 Hibernate 非常生气。那么这实际上是可能的还是最好避免删除它们并尝试通过合并来完成?

来自 hibernate 的愤怒:

org.hibernate.PersistentObjectException: detached entity passed to persist: com.idbs.omics.catalog.entity.Term

谢谢

最佳答案

My thought was to just delete the old ones and re-create it from the incoming XML. However, doing a persist when my entities having existing IDs seem to make Hibernate very angry..

事实上,您不能在应该生成 Id 时分配它,至少对于不会将实体视为 而是分离(在这种情况下,JPA 规范在确切规则上有点模糊,但这就是 Hibernate 的行为方式,请参阅 5.1.4.5. Assigned identifiers 以获得更多提示)。

So is this actually possible or is it better to avoid deleting them and just trying to do it with merge?

要使网络服务用例的删除/插入成为可能,您必须:

  • 不分配 id ~或~
  • 使用没有生成标识符的实体的特殊版本~或~
  • 使用bulk operations (?)

如果您实际上正在更新分离的 实体,那么替代方案确实是使用merge(但请查看这些previous questions 以防万一).

哪种方法更好?我不知道,它认为这取决于您的需求。如果您要更新现有实体,后者似乎更自然。使用前者,您将真正获得"new"实体(包括乐观锁定列的新值)。根据流程的具体实现,性能也可能会有所不同。顺便说一下,并发性如何(只是提一下,我并不是真的期待答案)?

关于java - 我可以覆盖生成的 ID 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4125921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com