簡體   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