我想在JPA中实现更新查询。我尝试过:
public void updateTransactionStatus(String uniqueId, String type, String status) throws Exception {
String hql = "update " + PaymentTransactions.class.getName()
+ " e SET e.status = :status WHERE e.unique_id = :unique_id AND e.type = :type";
TypedQuery<PaymentTransactions> query = entityManager.createQuery(hql, PaymentTransactions.class).setParameter("status", status).setParameter("unique_id", uniqueId).setParameter("type", type);
query.executeUpdate();
}
但是我得到Update/delete queries cannot be typed
。什么是实现此目的的适当方式?>我尝试用Query替换TypedQuery,但得到The type Query is not generic; it cannot be parameterized with arguments <PaymentTransactions>
答案 0 :(得分:0)
通常,如果不需要,则应避免将批处理更新与JPA一起使用,除非它们是从标记为REQUIRES_NEW
的事务中触发的(这是唯一的操作)。
似乎您需要对一个唯一条目执行更新,所以我建议在查询后进行修改,即是这样:
// retrieve
PaymentTransactions paymentTransaction =
entityManager.createQuery("select t from " + PaymentTransactions.class.getName()
+ " where e.unique_id = :unique_id AND e.type = :type "
, PaymentTransactions.class);
.setParameter("unique_id", uniqueId).setParameter("type", type)
.getSingleResult();
// modify
paymentTransaction.setStatus(status);
这里是TypedQuery
的地方。
只要您的方法在事务上下文中,这就是更新条目所需的全部操作。