假设我正处于创建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();
}
它是否适用于Query
的所有实例? NamedQuery
,NativeQuery
等
当然,我在谈论在同一个EntityManager
内重用一个实例,即在同一个交易中
答案 0 :(得分:0)
我尝试了同样的事情,在循环中执行相同的查询(更新),并在第二次执行时得到“数据不匹配”。所以我把createQuery放在循环中,它运行正常。不完全是我所期望的。我会说它不是JPQL - 它是一个NamedNativeQuery。
答案 1 :(得分:-1)
可以重复使用Query。我已经尝试过工作了。
答案 2 :(得分:-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);