2010-09-18 7 views
5

A pesar del hecho de que mi consulta JDO contiene DOSdeclareParameters declaraciones, el código de abajo produce un error reclamando un solo parámetro se acepta:JDO Excepción: "La consulta requiere 1 parámetro, pero se han proporcionado 2 valores".

de consulta requiere 1 parámetros, sin embargo, se han previsto 2 valores.

Los dos parámetros son amountP y taxP:

javax.jdo.Query query= pm.newQuery(Main.class); 
query.setFilter("amount == amountP && tax < taxP"); 
query.declareParameters("int amountP"); 
query.declareParameters("int taxP"); 
List<Main> results = (List<Main>)query.execute (amountP, taxP); 

Sin embargo, con los siguientes cambios, funciona.

javax.jdo.Query query= pm.newQuery(Main.class); 
query.setFilter("amount == amountP && tax < taxP"); 
query.declareParameters("int amountP, int taxP"); 
List<Main> results = (List<Main>)query.execute (amountP, taxP); 

Mi pregunta es: ¿Cuál fue mal con la sintaxis original?

Actualización: This problem has been reported by others pero sin explicación.

Respuesta

6

El JDO API parece requerir que todos los parámetros se configuren a la vez. El método se llama declareParameters, que parece ser un "setter", y no un "sumador". El nombre del método puede ser engañoso, y la documentación no es tan buena, pero parece ser la forma en que es.

Esto es diferente de las "extensiones" que admiten un setter y un sumador: addExtension(), setExtensions().

2

Parece bastante obvio que la segunda llamada a declareParameters reemplaza el parámetro declarado en la primera llamada. La forma correcta de declarar más de un parámetro se muestra en su segundo ejemplo.

+1

+1 Como el comportamiento parece implicar que su afirmación es correcta. Tal vez el infractor le gustaría explicar por qué él/ella votó negativamente? – jmort253

1

La explicación tomada de la documentación oficial: link here

void declareParameters(java.lang.String parameters) 
  • declarar la lista de parámetros de ejecución de consulta. La declaración del parámetro es una cadena que contiene una o más declaraciones de parámetros de consulta separadas por comas. Cada parámetro nombrado en la declaración de parámetro debe vincularse a un valor cuando se ejecuta la consulta .

El parámetro String de este método sigue la sintaxis de los parámetros formales en el lenguaje Java.

  • Parámetros: Parámetros - la lista de parámetros separados por comas.
Cuestiones relacionadas