我正在使用带注释的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 :(得分: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