2016-11-15 66 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