Исключение JDO: «Для запроса требуется 1 параметр, но были предоставлены 2 значения». - PullRequest
5 голосов
/ 18 сентября 2010

Несмотря на то, что мой запрос JDO содержит TWO declareParameters операторов, приведенный ниже код выдает ошибку, утверждающую, что принят только один параметр :

Для запроса требуется 1 параметр, но были предоставлены 2 значения.

Два параметра amountP и 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); 

Однако со следующими изменениями это работает.

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

Мой вопрос: Что не так с оригинальным синтаксисом?

Обновление: Об этой проблеме сообщали другие , но без объяснения причин.

Ответы [ 3 ]

6 голосов
/ 18 сентября 2010

JDO API , кажется, требует, чтобы все параметры были установлены одновременно. Метод называется declareParameters, который выглядит как «установщик», а не как «сумматор». Название метода может вводить в заблуждение, и документация не так уж и хороша, но, похоже, это именно так.

Это отличается от "расширений", которые поддерживают сеттер и сумматор: addExtension(), setExtensions().

2 голосов
/ 18 сентября 2010

Кажется довольно очевидным, что второй вызов метода DeclareParameters заменяет параметр, объявленный в первом вызове. Во втором примере показан правильный способ объявления более одного параметра.

1 голос
/ 18 апреля 2012

Пояснения взяты из официальной документации: ссылка здесь

void declareParameters(java.lang.String parameters)
  • Объявить список параметров выполнения запроса .Объявление параметра представляет собой строку, содержащую одно или несколько объявлений параметров запроса, разделенных запятыми.Каждый параметр, указанный в объявлении параметра, должен быть привязан к значению при выполнении запроса.

Параметр String для этого метода соответствует синтаксису формальных параметров на языке Java.

  • Параметры: параметры - список параметров, разделенных запятыми .
...