JPA QL";在;收集不';不适用于OpenJPA1.2.2

JPA QL";在;收集不';不适用于OpenJPA1.2.2,jpa,openjpa,Jpa,Openjpa,JPA1与OpenJPA1.2.2在单元测试支持的HSQLDB1.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.vo

JPA1与OpenJPA1.2.2在单元测试支持的HSQLDB1.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();
}
@Transactional
public void updateSettlementId(列出凭证ID、长结算ID){
String query=“UPDATE VoucherProcessed vp SET vp.consolution.id=:settlementId,其中vp.voucher.id位于(:voucherIds)”;
em.createQuery(query).setParameter(“结算单”,结算单)
.setParameter(“voucherIds”,StringUtils.join(voucherIds.iterator(),“,”))
.executeUpdate();
}
java.sql.SQLException:在语句[更新凭证\u已处理t0设置t1.consolution\u id=?其中(t0.consolution\u id in(?)]中找不到表]

在测试运行时,正在hsqldb中创建凭证处理表,因此上述错误似乎是错误的和误导性的

建议?

试试这个:

  .setParameter("voucherIds", voucherIds)

与Hibernate配合使用,但是(如果我错了,请纠正我)JPA规范没有在构造中定义
,允许在
setParameter()
中使用集合来进行查询,例如(:voucherIds)
”,这是特定于供应商的。

有人能指出代码格式化程序应该如何工作吗?我更正了格式,签出。请尝试使用Databasename.TABLENAME。另外,您不需要使用StringUtils,Query[1]setParameterList接受一个集合,上次我checked@priya实际上,我可以确认提议的解决方案在OpenJPA1.2.2中有效,您只需直接提供long列表即可。@TomaszNurkiewicz确实如此。“JSR 220:EJB版本3.0,Java持久性API”(JPA 1.0)的第4.6.8章“表达式中”。我编辑了我的答案,我的意思不是在语句中使用
,而是在
setParameter()
中使用集合,我的错误,对不起。当然,JPA允许您在查询中使用
,感谢您指出规范。