Коллекция JPA QL "IN" не работает для openjpa 1.2.2 - PullRequest
0 голосов
/ 10 мая 2011

JPA 1 с OpenJPA 1.2.2 в модульном тестировании с поддержкой Hsqldb 1.8. Следующий JPA QL не работает с «IN» в Списке идентификаторов.

@Transactional
public void updateSettlementId(List<Long> voucherIds, Long settlementId) {
    String query = "UPDATE VoucherProcessed vp SET vp.settlement.id=:settlementId where vp.voucher.id IN (:voucherIds)";
    em.createQuery(query).setParameter("settlementId", settlementId)
            .setParameter("voucherIds", StringUtils.join(voucherIds.iterator(), ","))
            .executeUpdate();
}

java.sql.SQLException: таблица не найдена в операторе [UPDATE VOUCHER_PROCESSED t0 SET t1.settlement_id =? ГДЕ (t0.voucher_id IN (?))]

Таблица VOUCHER_PROCESSED создается в hsqldb во время выполнения теста, поэтому приведенная выше ошибка выглядит ошибочной и вводящей в заблуждение.

Предложения

1 Ответ

1 голос
/ 10 мая 2011

Попробуйте это:

  .setParameter("voucherIds", voucherIds)

работает с Hibernate, но (пожалуйста, исправьте меня, если я ошибаюсь) Спецификация JPA не определяет IN конструкция позволяет использовать коллекцию в setParameter() для запросов типа "IN (:voucherIds)", это зависит от поставщика.

...