EntityManager返回的JPA的Query对象是否可重用?

Mig*_*ing 5 java jpa

假设我在创建JPA查询的循环中:

for(A elem : collection) {
  emanager.createQuery("update A a set a.x=:y where a.id=:id")
          .setParameter("id",elem.id)
          .setParameter(":y", 123)
          .executeUpdate();
}
Run Code Online (Sandbox Code Playgroud)

我可以重用返回的Query实例吗?

Query query = emanager.createQuery("update A a set a.x=:y where a.id=:id");
for(A elem : collection) {
  query
          .setParameter("id",elem.id)
          .setParameter(":y", 123)
          .executeUpdate();
}
Run Code Online (Sandbox Code Playgroud)

它适用于所有实例Query吗?NamedQuery,NativeQuery等等当然,我在谈论重用同一个实例EntityManager,即在同一个事务中

yer*_*glu -2

它可重复用于查询。据我尝试过工作。

  • 根据 JPA 2.1 规范,“3.1.1 EntityManager Interface”部分:_从实体管理器获取的 Query、TypedQuery、StoredProcedureQuery、CriteriaBuilder、Metamodel 和 EntityTransaction 对象在实体管理器打开时有效。_ (4认同)