[MAT] OQL查询字符串长度报NullPointerException异常

问题:
在Eclipse中使用OQL查询长度大于100的字符串时,报出NullPointerException

查询语句:

SELECT s FROM java.lang.String s WHERE s.value.length >= 100

错误信息:

Executed Query:
SELECT s FROM java.lang.String s WHERE s.value.length >= 100

java.lang.NullPointerException: s.value.length
    at org.eclipse.mat.parser.internal.oql.compiler.Operation$GreaterThanOrEqual.evalNull(Operation.java:277)
    at org.eclipse.mat.parser.internal.oql.compiler.Operation$RelationalOperation.compute(Operation.java:92)
    at org.eclipse.mat.parser.internal.oql.OQLQueryImpl.accept(OQLQueryImpl.java:1161)
    at org.eclipse.mat.parser.internal.oql.OQLQueryImpl.accept(OQLQueryImpl.java:1151)
    at org.eclipse.mat.parser.internal.oql.OQLQueryImpl.filterClasses(OQLQueryImpl.java:1133)
    at org.eclipse.mat.parser.internal.oql.OQLQueryImpl.doFromItem(OQLQueryImpl.java:921)
    at org.eclipse.mat.parser.internal.oql.OQLQueryImpl.internalExecute(OQLQueryImpl.java:690)
    at org.eclipse.mat.parser.internal.oql.OQLQueryImpl.execute(OQLQueryImpl.java:667)
    at org.eclipse.mat.inspections.OQLQuery.execute(OQLQuery.java:52)
    at org.eclipse.mat.inspections.OQLQuery.execute(OQLQuery.java:1)
    at org.eclipse.mat.query.registry.ArgumentSet.execute(ArgumentSet.java:132)
    at org.eclipse.mat.ui.snapshot.panes.OQLPane$OQLJob.doRun(OQLPane.java:468)
    at org.eclipse.mat.ui.editor.AbstractPaneJob.run(AbstractPaneJob.java:34)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)

解决方案:
将查询语句修改为

SELECT s FROM java.lang.String s WHERE s.value.@length >= 100

结果:

8130705-c7df455e8c735300.png
结果

原因:
不详,似乎只是对于String是这样的,而如果是自己编写的类查询相关属性直接在后面加上属性名即可,比如一个名称长度超过5的查询,写成下面这样

select p from Person p where p.name.value.@length > 5

转载于:https://www.jianshu.com/p/d26eb128095f

猜你喜欢

转载自blog.csdn.net/weixin_34067980/article/details/91228199
Mat