Запросы на обновление / удаление нельзя вводить - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу реализовать запрос на обновление в 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.Как правильно реализовать это?> Я попытался заменить TypedQuery на Query, но я получил The type Query is not generic; it cannot be parameterized with arguments <PaymentTransactions>

1 Ответ

0 голосов
/ 21 февраля 2019

Как правило, если вам это не нужно, следует избегать использования пакетных обновлений с 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.

До тех пор, покаваш метод находится в транзакционном контексте, вот и все, что вам нужно сделать, чтобы обновить запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...