@OneToOne java与@entity持续存在

时间:2016-11-15 08:53:23

标签: java hibernate persist

我在运行AccountIT测试时遇到新帐户的问题。我得到的错误是:

  

javax.persistence.PersistenceException:org.hibernate.PersistentObjectException:传递给persist的分离实体:no.phasfjo.dto.Customer

我认为它必须对@OnToOne注释做一些事情,但我想知道如何正确地改变它?

http://pastebin.com/w4z8PArY

2 个答案:

答案 0 :(得分:0)

昨天我遇到了这个错误,当我在已经保存的对象上调用entityManager.persist(...);时(因此它有一个ID)。要修复它,我不应该调用entityManager.persist(...),而是调用entityManager.merge(...)。也许这与你有a.t.m的问题相同。

(pastebin并没有真正显示真正的问题,所以我猜测......我是对的吗?)

答案 1 :(得分:0)

这与您可能滥用@OneToOne注释的事实有关。在JPA @OneToOne中,Customer的主键与Account的主键相同,Login的主键相同。由于它们是一对一的,它们不能彼此独立存在,一旦它们开始出现这些错误。

您有两种选择,

  • 将您的注释更改为@OneToMany
  • 不要在测试中保留CustomerLogin而是实例化它们,然后使用AccountCustomer实例化Login,最后只调用一次persist Account永远不会CustomerLogin