2013-03-04 27 views
0

我執行JDOQL查詢可能看起來有點複雜:怪異「的com.vividsolutions.jts.geom.Geometry」 ClassNotResolvedException例外

Query q = pm.newQuery(IxlTest.class, "id == :tId && parameterGroups.get(oGroup.key).contains(tp) && oGroup.contains(opt) && opt.displayInResults"); 
q.setResult("oGroup, opt"); 
vars.append(TestTypeOptionsGroup.class.getName() + " oGroup;"); 
vars.append(TestTypeOption.class.getName() + " opt;"); 
vars.append(TestParameterGroup.class.getName() + " tpGroup;"); 
vars.append(TestParameter.class.getName() + " tp;"); 
q.declareVariables(vars.toString()); 
System.out.println(q.execute(testId)); 

沒有任何理由,我可以認爲DN會因爲我的類與幾何無關,所以需要類Geometry。這是parameterGroups映射IxlTest

這些TestParameterGroup領域

@Persistent(primaryKey = "true", valueStrategy = IdGeneratorStrategy.IDENTITY) 
private long id; 
private String name; 
private String key; 
private boolean active; 
@Column(name = "script_substitute") 
private boolean scriptSubstitute; 
@Column(name = "substitute_all") 
private boolean substituteAll; 
@Column(name = "script_value_when_checked") 
private String scriptValueWhenChecked; 
@Column(name = "script_value_when_unchecked") 
private String scriptValueWhenUnChecked; 
@Persistent(defaultFetchGroup = "true") 
@Key(types = { String.class }, mappedBy = "key", dependent = "true") 
@Value(types = { TestParameter.class }, column = "parameters_group_id", dependent = "true") 
private Map<String, TestParameter> parameters; 

這些TestParameter領域

@Persistent(primaryKey = "true", valueStrategy = IdGeneratorStrategy.IDENTITY) 
private long id; 
private String key; 
private String value; 
private boolean active; 
@Column(name = "script_substitute") 
private boolean scriptSubstitute; 
@Column(name = "substitute_all") 
private boolean substituteAll; 

我還在建立我的查詢,但只是爲了確保沒有什麼是錯了,我試着在完成整個查詢之前運行它,我得到了這個異常:

javax.jdo.JDOException: Class "com.vividsolutions.jts.geom.Geometry" was not found in the CLASSPATH. Please check your specification and your CLASSPATH. 
    at org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:570) 
    at org.datanucleus.api.jdo.JDOQuery.execute(JDOQuery.java:252) 

Class "com.vividsolutions.jts.geom.Geometry" was not found in the CLASSPATH. Please check your specification and your CLASSPATH. 
org.datanucleus.exceptions.ClassNotResolvedException: Class "com.vividsolutions.jts.geom.Geometry" was not found in the CLASSPATH. Please check your specification and your CLASSPATH. 
    at org.datanucleus.JDOClassLoaderResolver.classForName(JDOClassLoaderResolver.java:245) 
    at org.datanucleus.JDOClassLoaderResolver.classForName(JDOClassLoaderResolver.java:410) 
    at org.datanucleus.store.rdbms.sql.expression.SQLExpressionFactory.invokeMethod(SQLExpressionFactory.java:382) 
    at org.datanucleus.store.rdbms.sql.expression.ObjectExpression.invoke(ObjectExpression.java:783) 
    at org.datanucleus.store.rdbms.query.QueryToSQLMapper.processInvokeExpression(QueryToSQLMapper.java:2871) 
    at org.datanucleus.query.evaluator.AbstractExpressionEvaluator.compilePrimaryExpression(AbstractExpressionEvaluator.java:200) 
    at org.datanucleus.query.evaluator.AbstractExpressionEvaluator.compileUnaryExpression(AbstractExpressionEvaluator.java:169) 
    at org.datanucleus.query.evaluator.AbstractExpressionEvaluator.compileAdditiveMultiplicativeExpression(AbstractExpressionEvaluator.java:148) 
    at org.datanucleus.query.evaluator.AbstractExpressionEvaluator.compileRelationalExpression(AbstractExpressionEvaluator.java:123) 
    at org.datanucleus.query.evaluator.AbstractExpressionEvaluator.compileOrAndExpression(AbstractExpressionEvaluator.java:65) 
    at org.datanucleus.query.evaluator.AbstractExpressionEvaluator.evaluate(AbstractExpressionEvaluator.java:46) 
    at org.datanucleus.query.expression.Expression.evaluate(Expression.java:337) 
    at org.datanucleus.query.expression.DyadicExpression.evaluate(DyadicExpression.java:70) 
    at org.datanucleus.query.expression.DyadicExpression.evaluate(DyadicExpression.java:67) 
    at org.datanucleus.query.expression.DyadicExpression.evaluate(DyadicExpression.java:67) 
    at org.datanucleus.store.rdbms.query.QueryToSQLMapper.compileFilter(QueryToSQLMapper.java:461) 
    at org.datanucleus.store.rdbms.query.QueryToSQLMapper.compile(QueryToSQLMapper.java:381) 
    at org.datanucleus.store.rdbms.query.JDOQLQuery.compileQueryFull(JDOQLQuery.java:883) 
    at org.datanucleus.store.rdbms.query.JDOQLQuery.compileInternal(JDOQLQuery.java:343) 
    at org.datanucleus.store.query.Query.executeQuery(Query.java:1747) 
    at org.datanucleus.store.query.Query.executeWithArray(Query.java:1666) 
    at org.datanucleus.api.jdo.JDOQuery.execute(JDOQuery.java:243) 

爲什麼DN認爲我需要任何基於地理的類?

+1

有人會根據你的帖子知道嗎?你不會發布CLASSPATH(就像消息意味着你看的那樣)或者類,所以沒有人知道這些字段是什麼類型... – 2013-03-05 08:27:05

+0

@NeilStockton,我沒有添加任何對象圖的原因是因爲它是第一次我聽說過那門課,我很確定我沒有在任何地方使用它。我爲此道歉,現在我的問題中有一些對象圖。謝謝。 – 2013-03-05 10:40:23

回答

1

該查詢很簡單(恕我直言)。你有

parameterGroups.get(oGroup.key).contains(tp) 

「parameterGroups」是一個地圖,所以「parameterGroups.get(......)」TestParameterGroup。因此,「TestParameterGroup.contains」試圖做什麼。或者「oGroup.contains(...)」也適用於此事。

如果您將該類拋入異常中,那麼您要麼引用它,要麼在類路徑中包含各種隨機jar,例如「datanucleus-spatial」。

+0

嗯,是的,我包括所有DN的RDBMS庫和包括空間和jpa在內的代碼。我不確定我是否不需要其他任何東西,但我刪除了這些2.對於奇怪的查詢,這是一個複雜的查詢,我試圖實現,說實話。 TestTypeOptionsGroup(即oGroup)是'TestParameterGroup'使用的對象,其行爲與預期的一樣,所以我需要用'TestTypeOptionsGroup'的相同鍵查找'TestParameterGroup',而'TestTypeOptionsGroup'具有帶有特定布爾值集的參數爲true,那麼,使用相同的'TestTypeOptions'鍵獲得'TestParameter' !!,謝謝任何方式:) – 2013-03-05 13:40:47

+0

我通過簡單地重新排序它的條件解決了另一個類似的查詢。我想這就是問題所在。條件訂購!如果條件有重大意義,是否可以在某處解釋? – 2013-03-07 12:53:12