查了网上一些博客,似乎目前没有这个问题的解决方式
问题:
在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
结果:
结果
原因:
不详,似乎只是对于String是这样的,而如果是自己编写的类查询相关属性直接在后面加上属性名即可,比如一个名称长度超过5的查询,写成下面这样
select p from Person p where p.name.value.@length > 5