2015-09-29 33 views
0
public Person deletePerson(Person entity) { 
    EntityManager ems = emf.createEntityManager(); 

    try { 
     ems.getTransaction().begin(); 
     ems.merge(entity); 
     ems.remove(entity); 
     ems.getTransaction().commit(); 
    } finally { 
     ems.close(); 
    } 
    return entity; 
} 

它不工作我不知道为什么?给我java.lang.IllegalArgumentException实体必须设法调用remove?

+4

把你自己放在我们的鞋子里。如果没有任何关于这些代码的背景,为什么你会相信我们不仅能够客观地理解错误来自哪里以及为什么它会发生? – Makoto

+0

其关于JPA我试图删除一行。应该很简单,但我不知道为什么它不起作用。代码是标准的。 –

+0

你的问题很可能会被关闭。别担心,这不是世界末日。只要您添加必要的信息(通过使用您的文章下面的编辑链接),您可以请求重新打开它。 – 11684

回答

5

它不起作用,因为删除操作需要托管实体传递给它。你可以修改这样的代码,使其工作:

entity = ems.merge(entity); 
ems.remove(entity); 

因为merge收益管理实体实例,您可以调用remove与它返回的对象,因为它是由JPA(您传递给merge对象是管理不受影响,这就是您的代码失败的原因)。

+1

您可以使用em.getReference()来改进解决方案。使用ems.merge(entity)会在'DELETE'之前向数据库发出不必要的'SELECT'语句。以下应该只发出'DELETE'语句:'ems.remove(ems.getReference(entity.getId))' – OndrejM

相关问题