Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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 从entityManager发送到其他层实体之前是否始终(深度)克隆?_Java_Database_Jpa_Entitymanager - Fatal编程技术网

Java 从entityManager发送到其他层实体之前是否始终(深度)克隆?

Java 从entityManager发送到其他层实体之前是否始终(深度)克隆?,java,database,jpa,entitymanager,Java,Database,Jpa,Entitymanager,对于一个真实世界的应用程序,当您可以在3层(ui业务持久层)之间发送同一个对象时,是否有一个示例?例如,为了简单起见,让它成为实体bean 我的意思是,如果我从entityManager获取了getReference()并发送给用户,并且允许用户编辑、创建它,而不是在我的代码的任何地方复制它 如果您选择此选项,是否存在任何并发或已知问题? 这个选项的缺点是什么 我知道如果我们包装对象会很好,通过这种方式我们可以附加、打包实体,并可以在一个对象中移动对象,可能会响应它们,我们可以附加其他属性,比如

对于一个真实世界的应用程序,当您可以在3层(ui业务持久层)之间发送同一个对象时,是否有一个示例?例如,为了简单起见,让它成为实体bean

我的意思是,如果我从entityManager获取了getReference()并发送给用户,并且允许用户编辑、创建它,而不是在我的代码的任何地方复制它

如果您选择此选项,是否存在任何并发或已知问题? 这个选项的缺点是什么

我知道如果我们包装对象会很好,通过这种方式我们可以附加、打包实体,并可以在一个对象中移动对象,可能会响应它们,我们可以附加其他属性,比如脏旗,但是如果我想保持简单性,有可能吗?或者整个管理者会把事情搞砸?(我觉得他们会也不能正确处理分离的对象,所以最好封装整个持久性和UI层,并深度复制它们……)


谢谢你的回答。

我在这本书中找到了这个答案:

我认为主要原因是深度复制实体的并发线程访问,参考如下:

应用程序不能直接从多个线程访问实体 而它是由持久性上下文管理的。申请可以 但是,选择允许在以下情况下同时访问实体: 他们是独立的。如果它选择这样做,则必须执行同步 通过实体上编码的方法进行控制。并发实体 但是,不建议使用状态访问,因为实体模型 不适合并发模式应该是 最好只复制实体并将复制的实体传递给 访问其他线程,然后将任何更改合并回 需要持久化时的持久化上下文


为什么您不能只使用em.find()您的实体,然后使用em.merge()保存在UI中所做的更改呢?因为它目前不起作用!客户端看到其他编辑的实体,实体不能随机合并(entityManager看不到持久化实体和分离实体之间的差异)。我只想找到活动标志为1的位置,所以需要自定义查询,这也稍微改变了一点。