2017-01-24 45 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

测试中的运气如何?它对你有用吗? –