2016-11-15 96 views
0

當我運行我的AccountIT測試時,我遇到了一個持續存在新帳戶的問題。該錯誤我得到的是:@OneToOne java堅持使用@entity

javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: no.phasfjo.dto.Customer

我想它做的@OnToOne註釋的東西,但我cannott弄清楚如何正確地改變呢?這已被保存(並且因此它有一個ID)的對象上entityManager.persist(...);

http://pastebin.com/w4z8PArY

+0

javax.persistence.PersistenceException:org.hibernate.PersistentObjectException:傳遞給persist的分離實體:no.phasfjo.dto.Customer。在no.phasfjo.infrastructure.account.JpaAccountDao.persist(JpaAccountDao.java:26), – Paul

回答

0

昨天我有這個錯誤,當我打電話。要解決它,我不應該叫entityManager.persist(...),但entityManager.merge(...)。也許這與你有一個問題是一樣的問題。

(該引擎收錄並沒有真正展現出真正的問題是什麼,所以我猜......我說得對不對?)

+0

Hii Jeroen,對不起,我沒有把所有的錯誤信息。我會盡力改變它。但是我得到了同樣的錯誤:傳遞給persist的分離實體:no.phasfjo.dto.Customer。 – Paul

+0

客戶類別: http://pastebin.com/3XLNT1L5 – Paul

+0

我再次檢查了您的pastebin ...仍然沒有發現此問題...但是也許....您的toString()具有以下兩行: '',customer =「+ customer +'\ n'」,customer ='「+ login +' - 如果不是login =? –

0

這是與事實,你可能會誤用@OneToOne註釋做。在JPA @OneToOne中表示Customer的主鍵與Account的主鍵相同,並且對於Login也是相同的。因爲它們是一對一的,所以它們不能彼此獨立存在,並且一旦它們開始出現這些錯誤。

你有兩個選擇,

  • 改變你的註釋@OneToMany
  • 不要在您的測試持續CustomerLogin而實例化它們,然後用CustomerLogin實例Account最後調用一次只能堅持在Account上,從不在CustomerLogin上。
+0

謝謝。我有一個合乎邏輯的問題。因爲這是一個演示webshop項目。我試圖找出實體之間的關係。一個賬戶擁有一個客戶,一個登錄服務(用戶名,密碼)。這聽起來正確嗎? – Paul

+0

順便說一句 - 它與實例化,然後只堅持帳戶。謝謝,問題解決=) – Paul

+0

基本上我只使用'@ OneToOne'映射,當我相信一個子對象不能沒有父對象時就存在。以您的示例爲例,我會說'Login'應該永遠不會存在沒有'Account'或'Customer',所以'@ OneToOne'是正確的,您只需要記住不要獨立保存子對象。 – aorticDefiance