JPA QL“IN”集合不适用于openjpa 1.2.2

时间:2011-05-10 16:05:45

标签: jpa openjpa

JPA 1与OpenJPA 1.2.2在单元测试支持的Hsqldb 1.8中。以下JPA QL不适用于ID列表中的“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 =? WHERE(t0.voucher_id IN(?))]

在测试运行时,hsqldb中正在创建VOUCHER_PROCESSED表,因此上述错误似乎是错误的并且具有误导性。

建议?

1 个答案:

答案 0 :(得分:1)

试试这个:

  .setParameter("voucherIds", voucherIds)

适用于Hibernate,但(如果我错了,请纠正我)JPA规范没有定义IN构造允许在setParameter()中使用集合来查询“IN (:voucherIds) {1}}“,这是特定于供应商的。