Hibernate注释的@Query参数无法正常工作

时间:2017-01-24 22:31:57

标签: java hibernate

我正在使用带注释的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);

这是因为没有逃避单引号吗?如果是这样,我如何在注释中转义那些引号?我寻找文档并且做得很短。

1 个答案:

答案 0 :(得分: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