从JPA / EJB3持久性上下文中分离实体

马修·鲁斯顿(Matthew Ruston):

分离通过EntityManager获取的特定JPA实体Bean的最简单方法是什么。或者,我是否可以首先使用查询返回分离的对象,以便它们本质上充当“只读”对象?

之所以这样做,是因为我想修改bean中的数据-仅在我的应用程序中使用,但从未将其持久化到数据库中。在我的程序中,我最终不得不在EntityManager上调用flush(),该操作将持久保留从附加实体到底层数据库的所有更改,但是我想排除特定的对象。

安德烈:

不幸的是,在当前的JPA实现AFAIR中,无法从实体管理器断开一个对象的连接。

EntityManager.clear()将断开所有 JPA对象的连接,因此,如果您确实计划保持其他连接,那么在所有情况下这都不是一个合适的解决方案。

因此,最好的选择是克隆对象并将克隆传递给更改对象的代码。由于默认克隆机制以适当的方式处理了原始和不可变的对象字段,因此您无需编写大量的管道代码(除了深克隆可能具有的任何聚合结构之外)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章