【发布时间】:2014-05-18 09:06:53
【问题描述】:
我在现有桌面应用程序中引入 JPA,该应用程序具有持久层,其中对象从数据库中提取并使用普通查询存储回来。
提取对象后,在 UI 端使用它来显示它并保持用户编辑。当用户按下“保存”按钮时,将调用持久层并传递对象并将其存储回数据库中。如果用户按下“取消”按钮,修改将被丢弃,并且持久层不会发生任何事情。
我正在用 JPA 替换普通查询机制。现在的问题是,当使用 JPA 检索对象时,它是被管理的。当用户对其进行修改时,更改将直接存储在数据库中。
我无法修改 UI 代码,因此新的持久层(基于 JPA)应该模拟旧的持久层(基于普通查询)的行为。
我怎样才能获得它?
我正在考虑在将对象从持久层返回之前分离它们。在这种情况下,直到调用持久层,用户修改才会持久化。
为了分离对象我可以:
- 调用EntityManager 中的分离方法。此解决方案需要对关系进行注释以分离相关对象。
- 在每次持久层操作后清除 EntityManager。
分离解决方案正确吗? 哪种分离方法更好?
【问题讨论】:
标签: java jpa desktop-application lifecycle