2017-01-24 70 views
3

我與一個註解Hibernate查詢工作,並收到以下異常@Query參數:Hibernate的註釋工作不正常

Caused by: org.hibernate.QueryParameterException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 2 
at org.hibernate.engine.query.ParameterMetadata.getOrdinalParameterDescriptor(ParameterMetadata.java:81) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final] 
at org.hibernate.engine.query.ParameterMetadata.getOrdinalParameterExpectedType(ParameterMetadata.java:87) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final] 
at org.hibernate.impl.AbstractQueryImpl.determineType(AbstractQueryImpl.java:444) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final] 
at org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:416) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final] 
at org.hibernate.ejb.QueryImpl.setParameter 

這裏的代碼,導致了它:

@Query(value = "from MatchReport where match = ?1 and categoryCDList like '%?2%' or categoryCDList like '%ALL%'") 
@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value = "true") }) 
List<MatchReport> findByMatchAndUserType(Match match, String userType); 

這是幸​​福不逃避單引號造成的?如果是這樣,我怎樣才能在註釋中轉義這些引號?我查找了文檔並且簡短了一些。

+0

有此相同的問題 - 如果任何人有一個答案,這將是真棒 – izikandrw

+0

什麼彈簧數據的JPA版? –

回答

0

好吧,我做了一些測試,您的查詢應該是這樣的:

@Query(value = "from MatchReport where match = ?1 
       and categoryCDList like %?2% or categoryCDList like '%ALL%'") 

所以基線是,你不需要把雙括號內的類似條件下是否會進行匹配的唯一價值是序數參數。

同樣名爲參數會的工作:

@Query(value = "from MatchReport where match = :match 
      and categoryCDList like %:usertype% or categoryCDList like '%ALL%'") 
List<MatchReport> findByMatchAndUserType(
      @Param("match")Match match, @Param("usertype")String userType); 

我用spring-data-jpa:1.11.0.RC1

+0

測試中的運氣如何?它對你有用嗎? –