无法输入更新/删除查询

时间:2019-02-21 14:07:36

标签: java jpa

我想在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>

1 个答案:

答案 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的地方。

只要您的方法在事务上下文中,这就是更新条目所需的全部操作。