2013-03-04 9 views
0

내가 조금 복잡한 볼 수있는 JDOQL 쿼리를 수행하고 있습니다 : 그 DN 생각할 수있는 이유가 없습니다이상한 "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)); 

것 내 클래스가 기하학과 아무 관련이 없으므로 Geometry 클래스가 필요합니다. 이것은 이러한 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; 

난 아직도 내 쿼리를 짓고 있어요 그러나 다만 확실히 아무것도 없다 있도록되어 있습니다 parameterGroups 매핑

@Persistent(defaultFetchGroup = "true", table = "ixl_test_parameter_groups_rel") 
@Join(column = "test_fk", extensions = { @Extension(vendorName = "datanucleus", key = "primary-key", value = "false") }) 
@Key(types = { String.class }, column = "test_parameter_group_key", mappedBy = "name", dependent = "true") 
@Value(types = { TestParameterGroup.class }, column = "test_parameter_group_fk", dependent = "true") 
private Map<String, TestParameterGroup> parameterGroups; 

IxlTest에 잘못, 내가 전체 쿼리를 완료하기 전에 실행 하고이 예외가 있어요 :

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를 보지 않습니다 (메시지가 당신이 보듯이), 또는 클래스를 게시하지 않습니다. 아무도 그 필드가 어떤 타입인지를 알지 못합니다 ... –

+0

@NeilStockton, 왜냐하면 제가 객체 그래프를 추가하지 않은 이유는 그것이 처음에는 그 수업에 대해 들어 봤는데 어디서나 사용하지 않을 것이라고 확신합니다. 나는 그것에 대해 사과합니다, 나는 지금 내 질문에 제시된 개체 그래프를 가지고 있습니다. 고맙습니다. –

답변

1

검색어가 단순히 이상합니다 (IMHO). 아직 "parameterGroups을"

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

이지도, 그래서 "parameterGroups.get (...)"입니다TestParameterGroup이다. 결과적으로 "TestParameterGroup.contains"을 시도합니다. 또는 "oGroup.contains (...)"도 그 문제입니다.

예외가 발생하면 해당 클래스를 참조하고 클래스 패스에 모든 종류의 임의 병 (예 : "datanucleus-spatial")을 포함시킵니다.

+0

그래, 공간 및 jpa를 포함하는 모든 DN의 RDBMS 라이브러리 및 deps를 포함했습니다. 나는 내가 다른 것을 필요로하지 않는지 확신 할 수 없다. 그러나 나는 그것을 제거했다. 2. 이상한 쿼리를 위해, 나는 성취하려고 노력하고있는 복잡한 쿼리이다. 솔직히 말해서. TestTypeOptionsGroup (즉, oGroup)은'TestParameterGroup'이 예상대로 행동하기 위해 사용하는 객체입니다. 그래서'TestTypeOptionsGroup'가 특정 부울 집합을 가진 매개 변수를 가지고있는 동안'TestTypeOptionsGroup'의 동일한 키로'TestParameterGroup'를 조회해야합니다 true로 설정하면 같은'TestTypeOptions' 키를 가진'TestParameter'를 얻습니다 !! 어떤 식 으로든 고마워요 :) –

+0

나는 단순히 조건을 재정렬함으로써 비슷한 또 다른 쿼리를 해결했습니다. 나는 그것이 문제라고 생각한다. 조건 순서! 조건의 순서가 중요하다면 어딘가에서 설명 할 수 있습니까? –