我有一個實體Player
這個ID確定指標預設ID新建實體檢測爲「獨立實體」
@Id
@GeneratedValue
@Column(updatable=false)
private long id;
然而,有時(但不總是)我想與預設的ID創建一個新的實例。
player = new Player(...);
player.setId(externalId);
em.persist(player);
這顯然導致Hibernate把它看作是一個離散的實體,拋出異常
org.hibernate.PersistentObjectException:通過分離的實體堅持
我怎樣才能避免這種情況?
我正在運行相同的服務器軟件兩次。在一個實例中,ID自動生成,但在另一個實例中,它們由外部提供(在這種情況下,由Facebook)。順便說一句,數據庫是空的,所以它不能是該ID已被使用。 –
好的,那麼它是空的,你正在設置一個標記爲「自動生成」的ID,這意味着當你要求你的EM持續時,它會查看ID,如果爲null(未設置)它將生成一個新ID並堅持你的實體。如果不爲空,那麼它會在數據庫中查找相應的實體並進行更新(我認爲,對我來說這已經很長一段時間了,沒有Java:P)。所以,當你設置你的ID時,它會查找一個不存在的實體,並告訴你實體不同步。 (我想它假設你的實體已被刪除之間你所謂的「find()」和「persist()」或類似的東西) –
Errm,「長」如何可以「未設置」(null)?它不能。它始終有一個值,無論是由編譯器還是由用戶應用。 – DataNucleus