JPA查找并更新策略

时间:2012-01-18 18:29:00

标签: jpa find entitymanager named-query

在我的JPA实现中,我做一个em.find()来选择对象列表并修改这些对象。接下来,我更新这些修改后的对象,在事务中调用em.merge()以便持久化其他相关的东西)。

除了SELECT发生两次(一次发现期间和另一次发生期间)这种情况很有效,我觉得这种情况多余且性能杀手。

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

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

由于

1 个答案:

答案 0 :(得分:0)

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

您使用的是哪个JPA提供商?如果您使用的是EclipseLink,则默认情况下会启用共享缓存。

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