7

假设我正在循环创建 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();
}

我可以重复使用返回的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();
}

它是否适用于所有实例QueryNamedQuery, NativeQuery, 等等 当然,我说的是在同一个事务中重用一个实例EntityManager,即在同一个事务中

4

3 回答 3

0

我尝试了完全相同的事情,在循环中执行相同的查询(更新),并且在第二次执行时得到“数据不匹配”。所以我把 createQuery 放在循环中,它工作正常。不完全是我所期望的。我会说这不是 JPQL - 它是 NamedNativeQuery。

于 2016-05-05T18:20:15.343 回答
-2

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

于 2012-06-27T14:37:36.023 回答
-5

为什么不尝试使用 EntityManager 方法来持久化、更新、删除数据库中的寄存器?

emanager.persist(elem); // creates a register in the database, set the annotation for autoincrement id of new registers in the Entity for better performance.

emanager.merge(elem); // updates a register in the database, chance the values of the Entity values and merge to persist changes to the register.

emanager.remove(emanager.merge(elem)); // delete registers from database, you need to merge de entity before deleting to avoid deleting problems.

所以你可以这样做并且可以正常工作:

for(A elem : collection) emanager.merge(elem);
于 2012-06-27T16:43:27.873 回答