2013-03-04 33 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