什么是hibernate参数名称的正确格式

时间:2017-09-03 16:35:25

标签: hibernate filter parameters format

我正在使用Hibernate Entity manager 5.1.8 Final

我有以下过滤器定义,用于注释名为Submission的类。

@FilterDefs({
    @FilterDef(name=Submission.BY_DATE_RANGE_FILTER, 
            parameters={ @ParamDef( name=Submission.WITH_START_PARAM, type="java.util.Date" ),
                         @ParamDef( name=Submission.WITH_END_PARAM,   type="java.util.Date" )
    }),
    @FilterDef(name=Submission.BY_INSTID_SET_FILTER, 
               parameters=@ParamDef( name=Submission.BY_INSTID_SET_PARAM, type="java.lang.String" ) ),
    })

@Filters({
    @Filter(name=Submission.BY_DATE_RANGE_FILTER, condition="added <= :lastDay and added > :firstDay"),
    @Filter(name=Submission.BY_INSTID_SET_FILTER, condition="instid in :byinstidsetparam"),
})

以及类

中的以下静态最终定义
public static final String WITH_START_PARAM = "firstDay";
public static final String WITH_END_PARAM = "lastDay";
public static final String BY_INSTID_SET_PARAM = "byinstidsetparam";

当我尝试激活这些过滤器中的一个或两个时,Hibernate会抛出异常

java.lang.IllegalArgumentException: Invalid filter-parameter name format
    at org.hibernate.engine.spi.LoadQueryInfluencers.parseFilterParameterName(LoadQueryInfluencers.java:144)
   at org.hibernate.hql.internal.ast.util.JoinProcessor.processDynamicFilterParameters(JoinProcessor.java:232)
   at org.hibernate.hql.internal.ast.util.SyntheticAndFactory.addWhereFragment(SyntheticAndFactory.java:98)
... more ...

谷歌搜索来源给了我这个: http://grepcode.com/file/repo1.maven.org/maven2/org.hibernate/hibernate-core/5.0.0.CR3/org/hibernate/engine/spi/LoadQueryInfluencers.java#LoadQueryInfluencers.parseFilterParameterName%28java.lang.String%29

如果参数名称不包含'。'。

,那么肯定会抛出此异常

但这是个谜。

  • 如果我将参数重命名为包含'。'我在同一个地方抛出了同样的异常。

  • 我没有在过滤器参数功能网上找到的示例(包括官方的Hibernate文档)有一个'。'在参数名称中。

这个源代码可能是一个红色的鲱鱼。

有谁知道发生了什么事?任何和所有建议都赞赏。

2 个答案:

答案 0 :(得分:0)

我没有找相关的地方。这是上面引用的过滤器名称(非参数)常量的定义

public static final String BY_STUDENTID_FILTER = "with-studentid";
public static final String BY_DATE_RANGE_FILTER = "within-daterange";
public static final String BY_INSTID_SET_FILTER = "with-instructorset";

从这些名称中删除' - '解决了这个问题。

摘要,过滤器名称不能包含连字符。如果他们这样做,Hibernate会抱怨过滤器参数定义的格式错误。

答案 1 :(得分:0)

可能您在查询中确定了“ ”而没有任何参数。