2011-05-10 3 views
0

JPA 1에서 작동하지 않습니다. 단위 테스트 지원 Hsqldb 1.8에서 OpenJPA 1.2.2. 다음 JPA QL은 ID 목록의 "IN"이 작동하지 않으면 작동하지 않습니다.JPA QL "IN"모음이 openjpa 1.2.2

@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 (?))]

위의 오류가 잘못 표시되어 오도 된 것처럼 테스트가 실행되는 동안 VOUCHER_PROCESSED 테이블이 hsqldb에 생성됩니다.

제안 사항? JPA 사양 "IN (:voucherIds)"와 같은 쿼리 setParameter()에서 컬렉션을 사용 허용 IN이를 구성 정의하지 않습니다 (내가 틀렸다면 수정하시기 바랍니다) 최대 절전 모드와

.setParameter("voucherIds", voucherIds) 

일을하지만, :

+1

코드 포맷터가 여기에서 작동하는 방법을 알아낼 수 있습니까? – pritam

+0

서식을 수정했지만 [서식 도움말] (http://stackoverflow.com/editing-help)을 확인하십시오. –

+0

Databasename.TABLENAME 또한 StringUtils를 사용할 필요가 없다. Query [1] setParameterList가 콜렉션을 취한다. 내가 마지막으로 체크했을 때 – Narayan

답변

1

이 시도 벤더마다 다릅니다.

+0

나는 그것이 최대 절전 모드에서 작동하지만 openjpa에서는 작동하지 않는다는 것을 알고있다. – pritam

+0

@priya 제안 된 솔루션이 OpenJPA 1.2.2에서 작동하는지 실제로 확인할 수 있습니다. Longs 목록을 직접 제공하면됩니다. – MaDa

+0

@TomaszNurkiewicz 그렇습니다. "JSR 220 : EJB 버전 3.0, Java Persistence API"(JPA 1.0)의 4.6.8 장 "IN 표현식" – MaDa

관련 문제