Java Hibernate OGM中MongoDB的JPA QL问题为空筛选器

Java Hibernate OGM中MongoDB的JPA QL问题为空筛选器,java,mongodb,hibernate,jpa,hibernate-ogm,Java,Mongodb,Hibernate,Jpa,Hibernate Ogm,我在MongoDB中使用Hibernate OGM。我的JPA QL如下: String checkquery = "SELECT p FROM pppoe_test p where p.sourceIP=:source_ip and p.login>:logentrytime and (p.logout>:logentrytime OR p.logout IS NULL)"; 我得到一个错误,比如: 输入“空”时没有可行的替代方案 HQL000002:查询从PPPoSession

我在MongoDB中使用Hibernate OGM。我的JPA QL如下:

String checkquery = "SELECT p FROM pppoe_test p where p.sourceIP=:source_ip and p.login>:logentrytime and (p.logout>:logentrytime OR p.logout IS NULL)";
我得到一个错误,比如:

输入“空”时没有可行的替代方案

HQL000002:查询从PPPoSession p中选择p,其中p.sourceIP=:source_ip和p.login>:logentrytime和(p.logout>:logentrytime或p.logout为NULL)无效

Exception in thread "main" org.hibernate.hql.ParsingException: HQL000002: The query SELECT p FROM PPPoESession p where p.sourceIP=:source_ip and p.login>:logentrytime and p.logout>:logentrytime OR p.logout IS NULL is not valid; Parser error messages: [[statement, statementElement, selectStatement, queryExpression, querySpec, whereClause, logicalExpression, expression, logicalOrExpression, logicalAndExpression, negatedExpression, equalityExpression]: line 1:144 state 0 (decision=51) no viable alt; token=[@51,144:147='NULL',<75>,1:144]].
at org.hibernate.hql.QueryParser.parseQuery(QueryParser.java:70)
at org.hibernate.ogm.datastore.mongodb.query.parsing.impl.MongoDBBasedQueryParserService.parseQuery(MongoDBBasedQueryParserService.java:40)
at org.hibernate.ogm.query.impl.OgmQueryTranslator.getQuery(OgmQueryTranslator.java:169)
at org.hibernate.ogm.query.impl.OgmQueryTranslator.getLoader(OgmQueryTranslator.java:134)
at org.hibernate.ogm.query.impl.OgmQueryTranslator.list(OgmQueryTranslator.java:128)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1326)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:87)
at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:606)
at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:483)
}

我确实在实体中正确设置了属性

@Entity (name="pppoe_test")
public class PPPoESession { ...

@Temporal(TemporalType.TIMESTAMP)
private Date logout;

@Basic(optional = false)
private String user;

@Basic(optional = false)
private String sourceIP;
谢谢

UPDATE1:问题不特定于日期类型,但也适用于字符串。想知道MongoDB提供程序是否支持IS NULL。已经发布在Hibernate OGM论坛上。当我收到他们的回信时会更新


UPDATE2:显然问题在于解析器对“null”、“false”和“true”的大小写敏感度。该问题出现在OGM v5.0.1的最新版本中。bug跟踪器中出现了一个问题,正在处理()

你能帮我做一个实验吗。您是否可以删除parantes并在没有它们的情况下执行相同的查询。您的JPA提供程序是否打印出它正在执行的本机MongoDB查询?(在日志中)。我用于MongoDB的JPA提供程序使用了大括号,并得到了相同的错误result@NeilStockton解析器抱怨语法有问题,所以可能还没有形成等价的查询。。。作为JPQL(假设类有这些字段……您真的有一个名为“pppoe_test”的类吗?)。您是以本机查询还是JPQL查询的形式输入它?如果是JPQL,则会在您的JPA提供程序上引发一个错误,因为这是有效的JPQL
@Entity (name="pppoe_test")
public class PPPoESession { ...

@Temporal(TemporalType.TIMESTAMP)
private Date logout;

@Basic(optional = false)
private String user;

@Basic(optional = false)
private String sourceIP;