2017-09-03 92 views
1

我使用Hibernate的实体管理器5.1.8决赛什么是休眠参数名称的正确格式

我有以下过滤器定义注释了一个名为提交类。

@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, 
       [email protected](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"; 

当我尝试激活任一或二者,这些滤波器的,休眠抛出异常

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文档)有一个'。'在参数名称中。

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

有没有人有任何想法是怎么回事?任何和所有建议表示赞赏。

回答

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会抱怨过滤器参数定义的格式错误。