当前位置: 首页 > 面试题库 >

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

苏鸿才
2023-03-14
问题内容

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

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


问题答案:

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

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

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



 类似资料:
  • 有一种方法可以绕过持久性上下文,只将实体用作数据库表的包装器?

  • 问题内容: 我是Java世界和JPA的新手。我在学习JPA时遇到了许多新术语,例如Entity,persistence。在阅读时,我无法理解 Persistence Context 的确切定义。 谁能用简单的外行术语解释它?与中使用的数据有什么关系? 例如,我发现此定义太复杂而难以理解: 持久性上下文是一组实体,因此对于任何持久性标识,都有一个唯一的实体实例。 问题答案: 持久性上下文处理一组实体

  • 持久性上下文是一组实体,因此对于任何持久性标识都有一个唯一的实体实例。

  • 我有以下基本存储库: 显然,这并没有提供任何-操作。我找到了一个答案,实际上对我不起作用:所以发帖。 我尝试了同样的方法,但似乎我的实体没有被分离(就像我改变了任何字段一样,它仍然被持久化) 使用:Spring-boot(1.4.0-release),spring4,JPA

  • 问题内容: 我正在创建一个简单的应用程序,只需使用将一行插入到表中(如果表不存在,则创建它)。 我为它的一个可运行示例附加了一些代码。 这是我得到的异常和stacktrace: 这是我的代码: 主班: 和Person类: 这是我的persistence.xml文件 -----------------------编辑-------------------------- – 我只是将提供程序更改为Ec

  • 我得到了异常org.hibernate.持久性对象异常:分离实体传递到持久性。从这个论坛和其他地方的许多帖子中,我知道这种情况发生在两种情况下(不考虑一对一注释等), 交易超出范围存在问题 在自动生成id的位置设置id 我在代码中没有看到这两种情况。我无法重现错误,因为我没有最初触发它的数据。在其他数据上,它运行得非常好。我提供了下面的SCCE: MyImportEJB。爪哇: 我的班级。JAVA