2

我在 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)";

我收到如下错误:

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

HQL000002:查询 SELECT p FROM PPPoESession p where p.sourceIP=:source_ip and p.login>:logentrytime and (p.logout>:logentrytime OR p.logout IS 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)

我有一个可以工作的本机 mongo 查询,但无法通过这个 JPA 路由让它工作。任何指针都会有所帮助。

这是我之前通过 OGM 插入的 mongodb 文档。

{
"_id" : "cc88a708-c222-4e52-b151-c0f40556b27e",
"connectionTimeInSeconds" : NumberLong(100),
"location" : "MyCastle",
"datatransferIn" : NumberLong(7777777),
"sourceIP" : "172.168.10.123",
"packetsOut" : NumberLong(33333),
"login" : ISODate("2016-07-09T20:45:36.492Z"),
"logout" : null,
"user" : "dvinod@xyz.com",
"packetsIn" : NumberLong(22222),
"datatransferOut" : NumberLong(5555555)

}

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

@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 中。错误跟踪器中提出了一个问题,正在处理中(https://hibernate.atlassian.net/browse/OGM-1118

4

0 回答 0