【发布时间】:2023-03-16 19:50:01
【问题描述】:
在我的 JPA 实现中,我执行 em.find() 来选择对象列表并修改这些对象。接下来,我在事务(TX)中调用 em.merge() 更新这些修改后的对象,以便保留其他对象相关的东西)。
这很好用,除了 SELECT 发生两次(一次在 find 期间,另一次在其他期间),我觉得这在我的情况下是多余的和性能杀手。
我不愿意将 find() 带入 em.merge() 的事务边界内,即使这样做会解决后一个 SELECT。
定义我自己的 NamedQuery 是在不发出另一个 SELECT 的情况下更新这些对象的唯一方法吗?
谢谢
【问题讨论】:
-
你能指定第二个 SELECT 发生在哪里吗?
-
为什么你不愿意将 find() 调用带入你的 tran 中?您使用的是什么提供商?
-
@Rick Select 需要几分钟来执行(因为非索引列查询)。 Select 执行的额外时间使事务超时(JBOSS 限制为 5 分钟)。我可能会增加时间,但将此作为最后的选择。
-
@perissf 在调用 merge() 期间发生第二次选择
-
在您的情况下,我会考虑重组数据库架构的可能性
标签: jpa find entitymanager named-query