2013-03-04 3 views
0

Je l'exécution d'une requête JDOQL qui pourrait paraître un peu complexe:étrange « com.vividsolutions.jts.geom.Geometry » ClassNotResolvedException exception

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)); 

Il n'y a aucune raison que je peux penser que DN serait besoin de cette classe Geometry, car mes classes n'ont rien à voir avec la géométrie. Ceci est parameterGroups mapping IxlTest

Ce sont TestParameterGroup champs

@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; 

Ce sont TestParameter champs

@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; 

Je suis toujours construis ma requête, mais juste pour vous assurer que rien est faux, j'ai essayé de l'exécuter avant de terminer la requête entière et j'ai obtenu cette exception:

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) 

Pourquoi DN pense-t-il que j'ai besoin d'une classe basée sur la géo?

+1

Comment quelqu'un pourrait-il le savoir en fonction de votre message? Vous ne postez pas le CLASSPATH (comme le message implique que vous regardez), ou les classes, donc personne ne sait quels types sont ces champs ... –

+0

@NeilStockton, la raison pour laquelle je n'ai pas ajouté de graphiques d'objet est parce que c'est la La première fois que j'ai entendu parler de cette classe et je suis sûr que je ne l'utilise nulle part. Je m'excuse pour cela, j'ai un graphique d'objet présenté dans ma question maintenant. Je vous remercie. –

Répondre

1

La requête est simplement bizarre (IMHO). Vous avez

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

encore "parameterGroups" est une carte, si "parameterGroups.get (...)" est un TestParameterGroup. Par conséquent, qu'est-ce que "TestParameterGroup.contains" essayant de faire. Ou "oGroup.contains (...)" aussi d'ailleurs. Si cette classe est levée dans une exception, vous devez la référencer ou inclure toutes les sortes de jars aléatoires dans le chemin de classe, par exemple "datanucleus-spatial".

+0

Eh bien oui, j'ai inclus toutes les librairies RDBMS de DN et les deps qui incluaient spatial et jpa. Je ne suis pas sûr si je n'ai pas besoin d'autre chose mais j'ai enlevé ces 2. Pour la requête étrange, c'est une question compliquée que j'essaye d'accomplir, pour être honnête. TestTypeOptionsGroup (ie oGroup) est un objet que 'TestParameterGroup' utilise pour se comporter comme prévu, donc je dois rechercher' TestParameterGroup's avec la même clé d'un 'TestTypeOptionsGroup' alors que' TestTypeOptionsGroup' a un paramètre avec un ensemble booléen spécifique à true, alors, obtenez le 'TestParameter' avec la même clé' TestTypeOptions' !!, merci de toute façon :) –

+0

J'ai résolu une autre requête similaire en réorganisant simplement ses conditions. Je suppose que c'est le problème; conditions commander! Si les conditions commandent, est-ce que cela serait expliqué quelque part? –