查了網(wǎng)上一些博客,似乎目前沒有這個問題的解決方式
問題:
在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
結(jié)果:

結(jié)果
原因:
不詳,似乎只是對于String是這樣的,而如果是自己編寫的類查詢相關(guān)屬性直接在后面加上屬性名即可,比如一個名稱長度超過5的查詢,寫成下面這樣
select p from Person p where p.name.value.@length > 5