CrudRepository - вызов хранимой процедуры не работает из-за типа / количества аргументов - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть сущность JPA как

enter image description here

И затем хранилище как

enter image description here

Теперь, когда я запускаю его, я получаю следующее исключение:

enter image description here

И хранимая процедура:

enter image description here

Он работает с базой данных Oracle.Может кто-нибудь, пожалуйста, помогите мне понять, хотя у меня есть правильные номера параметров и тип, тем не менее, почему я получаю это исключение.

Обратите внимание: У меня нет локальной среды, поэтому я не могу поставитьпример кода, и, пожалуйста, не беспокойтесь об имени класса / метода, я попытался замаскировать их, чтобы они могли быть несовместимыми.

Есть еще один вопрос, который предполагает, что у меня есть 2 параметра OUT, тогда как вы создаете мою сущностькласс, с одним выходным параметром, который я знаю, я могу вернуть String (или соответствующий тип возврата), но в случае 2 OUT параметров я не знаю, как это сделать?Я прочитал эту статью, но это только с параметром 1 OUT, и я не смог найти ни одну статью или пост, который объясняет параметр 2 OUT.Если у кого-то есть код с параметром 2 OUT, это будет полезно.

1 Ответ

0 голосов
/ 06 февраля 2019

Пожалуйста, попробуйте:

  • использовать точные (дБ) имена параметров процедуры:

    @StoredProcedureParameter(name = "tbl_name" ...
    @StoredProcedureParameter(name = "p_date" ...
    @StoredProcedureParameter(name = "p_message" ...
    
  • или (альтернативно) пропустить именаполностью (зависит от положения).

С StoredProcedureParameter javadoc :

Имя параметра , как определенохранимая процедура в базе данных .Если имя не указано, предполагается, что хранимая процедура использует позиционные параметры.


В настоящее время вы не можете иметь несколько OUT-параметров, используя spring-data , но (не должно быть) никаких проблем со стандартным JPA:

StoredProcedureQuery spq = em.createNamedStoredProcedureQuery("my_proc");
proc.setParameter("p_in", 1);
proc.execute();
Integer res1 = (Integer) proc.getOutputParameterValue("out1");
Integer res2 = (Integer) proc.getOutputParameterValue("out2");

см. также: Spring Data JPA NamedStoredProcedureQuery Multiple Out Параметры

...