0

在我的 JPA 实现中,我执行 em.find() 来选择对象列表并修改这些对象。接下来,我在事务中调用 em.merge() 更新这些修改后的对象(TX 以保留其他相关内容) .

这很好用,除了 SELECT 发生两次(一次在 find 期间,另一次在其他期间),我觉得这在我的情况下是多余的和性能杀手。

我不愿意将 find() 带入 em.merge() 的事务边界内,即使这样做会解决后一个 SELECT。

定义我自己的 NamedQuery 是在不发出另一个 SELECT 的情况下更新这些对象的唯一方法吗?

谢谢

4

1 回答 1

0

如果您使用的是 JTA 托管的 EntityManager,那么每个事务边界都将是一个新的持久性上下文,除非您配置了共享缓存,否则您将不得不返回数据库。

您使用的是哪个 JPA 提供程序?如果您使用 EclipseLink,则默认启用共享缓存。

对于 JPA 事务,如果您使用相同的 EntityManager 进行查找和合并,那么它应该仍然在持久化上下文中。

于 2012-01-19T14:41:29.013 回答