Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以将分离的实体';s ID并尝试在JPA中将其作为新实体持久化?_Java_Jpa_Entitymanager - Fatal编程技术网

Java 是否可以将分离的实体';s ID并尝试在JPA中将其作为新实体持久化?

Java 是否可以将分离的实体';s ID并尝试在JPA中将其作为新实体持久化?,java,jpa,entitymanager,Java,Jpa,Entitymanager,因此,我试图实现一种复制机制,在这种机制中,我必须使用一些更改的值从数据库中复制一个现有实体 首先,我可以为它们中的每一个编写一个副本构造函数,但是它们有很多 然后是解决方案: MyEntity copiedEntity=new MyEntity(); setField1(retrievedValue.getField1()); em.persist(复制性) 那绝对要花我一辈子的时间。因此,作为一个懒惰的开发人员,我尝试了以下方法: getEntityManager().detach(myEn

因此,我试图实现一种复制机制,在这种机制中,我必须使用一些更改的值从数据库中复制一个现有实体

首先,我可以为它们中的每一个编写一个副本构造函数,但是它们有很多

然后是解决方案:

MyEntity copiedEntity=new MyEntity();
setField1(retrievedValue.getField1());
em.persist(复制性)

那绝对要花我一辈子的时间。因此,作为一个懒惰的开发人员,我尝试了以下方法:

getEntityManager().detach(myEntity);
    myEntity.setId(null);
    myEntity.setStuffINeedToChange(newStuff);
    return this.create(myEntity);
现在,create函数是我的,它执行一些“非jpa”相关的操作,比如调用一些清理函数,并在我的应用程序上下文中设置一些其他的操作。最后是:

    getEntityManager().persist(entity);
    getEntityManager().flush();
    getEntityManager().refresh(entity);
但我不能坚持一个分离的实体,我只是基本上意识到一个分离的实体并不是我所想象的那样。我想我可以只使用detach(),实体对象就像一个全新的POJO,然后重新使用它。。。。你们有什么建议,我还能遵循这个解决方案吗

有没有办法将托管实体正确地转换为简单的POJO,然后像新实体一样持久化它?如果没有,有没有关于如何处理复制部分的建议,而不必使用大量的setter和getter或编写一些大型复制构造函数

感谢您的帮助和提示

编辑:当我尝试时会发生什么,我得到:
javax.persistence.TransactionRequiredException:

异常描述:此线程当前没有活动的外部管理事务

定义“我不能”。具体会发生什么?对分离的实体调用merge(…)而不是persist(…)。对具有空ID的分离实体调用merge是否会创建新记录?或者它会尝试更新行吗?我不是100%了解分离实体与非托管实体的工作原理。应该是这样的,但如果您的实体有子实体,您可能会遇到问题,如果它们是惰性加载的,则可能会遇到更多问题。我刚刚测试了它,美妙之处在于这些特定实体永远不会有任何子实体,非常感谢!将其作为解决方案发布,我会将其标记为已回答,否则我将在本周五编写后续解决方案,出于某种原因,我真的希望这需要更大的解决方案,再次感谢!定义“我不能”。具体会发生什么?对分离的实体调用merge(…)而不是persist(…)。对具有空ID的分离实体调用merge是否会创建新记录?或者它会尝试更新行吗?我不是100%了解分离实体与非托管实体的工作原理。应该是这样的,但如果您的实体有子实体,您可能会遇到问题,如果它们是惰性加载的,则可能会遇到更多问题。我刚刚测试了它,美妙之处在于这些特定实体永远不会有任何子实体,非常感谢!将其作为解决方案发布,我会将其标记为已回答,否则我将在本周五编写后续解决方案,出于某种原因,我真的希望这需要更大的解决方案,再次感谢!