我需要從批處理參數中動態檢索參數並將其設置爲我的查詢。這是我的實現:從批處理參數獲取輸入查詢
<bean id="Reader" scope="step"
class="org.springframework.batch.item.database.JpaPagingItemReader">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
<property name="queryString"
value="SELECT distinct d FROM ReglementClient r
JOIN FETCH d.etablissement e
WHERE e.code = #{jobParameters[code]}
And r.statut in('Validé')
" />
</bean>
我運行我的批處理usine以下參數:-Dcode = 882。
我有以下錯誤:
Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: And near line 1, column 697 [SELECT distinct d FROM com.natixis.smartcontestation.emetteur.entite.ReglementClient r JOIN FETCH d.etablissement e And r.statut in('Validé') And e.code = ]
at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:281)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:180)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:134)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1650)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:93)
實際上它似乎工作,但HQL是錯誤的,你的查詢字符串SQL從一個在堆棧跟蹤的不同,特別是「連接抓取在d.etablissement E和r.statut(」 Validé')和e.code =「似乎是問題,afaik在JOIN FETCH之後不能直接使用AND,它應該是WHERE或WITH –
我的查詢是:SELECT distinct d FROM ReglementClient r JOIN FETCH d.etablissement e WHERE r.statut in('Validé')and e.code =#{jobParameters [code]}。我認爲問題是由於它無法檢索#{jobParameters [code]}。我使用參數'code'運行批處理,使用-Dcode = 882 –
這是無效的JPQL(它不是SQL!)。請查看一個體面的JPQL參考...關於「IN」關鍵字和WHERE子句。 JPQL中沒有「#」符號! –