繁体   English   中英

检测到具有预设ID的新实体为“分离实体”

[英]New entity with preset ID detected as “detached entity”

我有一个具有此ID定义的实体Player

@Id
@GeneratedValue
@Column(updatable=false)
private long id;

但是,有时(但不总是)我想创建一个具有预设ID的新实例。

player = new Player(...);
player.setId(externalId);
em.persist(player);

这显然导致Hibernate将其视为独立实体,从而引发异常

org.hibernate.PersistentObjectException:分离的实体传递给持久化

如何避免这种情况?

我可以删除@GeneratedValue并自己生成ID,例如:

begin transaction
if id not preset {
    do {
        id = random number
    } while (id in use)
}
create player with id
commit transaction

对于事务而言,这应该是安全的,但它比让数据库进行处理要好。

那里出问题了。 您能否告诉我们为什么要使用固定ID? 因为您实际上是在说“请为我创建一个ID,但我永远都不想处理”,所以有时您尝试自己设置一个ID,这可能意味着您在破坏整个事情。

该异常可能是因为您要设置已使用的ID。 然后,当尝试持久化时,hibernate将其检测为与数据库中的内容不同步(分离),因此他仅抛出该异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM