2012-05-09 69 views
0

我試圖保存一個JPA實體兩次,因爲我想存儲父項和修改我的文章。保存JPA實體兩次

當我創建新的文章時,我實際上想要創建父文件和父文件副本的修訂版。喜歡的東西:

Article parent = new Article(); 
Article revision = parent.clone(); 

em.persist(parent); 
em.persist(revision); 

但實際發生的事情是,我正在上的第二個呼叫以下異常堅持:

org.hibernate.StaleStateException: 
    Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1 

我如何可以克隆項目,使我不會得到這樣的例外?

+0

你可以顯示你的clone()方法嗎?也許你應該重寫它,而不是爲複製的對象指定最初的ID。 – sp00m

+0

是自動生成的主鍵還是您正在生成並設置它的主鍵。如果生成它,克隆可能已經將該ID複製到修訂版,並且這導致了問題。 – raddykrish

+0

該鍵是自動生成的。我確保它不被複制。顯然,「克隆」方法複製了一些不希望的HIbernate屬性。 –

回答

0

你的克隆方法是否複製@Id(也可能是@Version)呢?你真的應該給你的副本一個新的ID(或者如果你使用@GeneratedValue,未保存的值,所以產生一個新的值)。

+0

父母和修訂版本都有@GeneratedValue,所以對於他們來說都是自動生成的。 –