Гость
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры / 18 сообщений из 18, страница 1 из 1
01.02.2022, 11:23
    #40130958
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры
Добрый день!
Не судите строго, только осваиваю эти фреймворки. Прошу помощи, не могу решить проблему.
Если хранимая процедура без параметров - работает без ошибки. Как только добавляю параметр - ошибка.


База Oracle 11.2.0.4.0
Java клинет 1.8
Использую библиотеку ojdbc6-11.2.0.3.jar


Хранимая процедура на стороне Оракл

Код: plsql
1.
2.
3.
4.
procedure get_Current_Exchange_Rate0(p_div_code_list in string) is
begin
  null;
  end;



К Базе подключаюсь так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Bean(name = "ora")
    public DataSource getDataSourceOracleDev() throws Exception {
        Map<String, String> secrets = dockerSecretUtils.load();
        HikariConfig config = new HikariConfig();
        config.setDriverClassName("oracle.jdbc.driver.OracleDriver");
        config.setJdbcUrl(url);
        config.setUsername(secrets.get(SECRETS_DB_BANK_USER).trim());
        config.setPassword(secrets.get(SECRETS_DB_BANK_PASSWORD).trim());
        config.setMaximumPoolSize(maxPool);
        HikariDataSource dataSource = new HikariDataSource(config);
        return dataSource;
    }



Entity

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@Entity
@NamedStoredProcedureQuery(
        name="getCurrentExchangeRate0",
        procedureName="TELEGRAMBOT.get_Current_Exchange_Rate0",
        parameters={
                @StoredProcedureParameter(name="p_div_code_list", type=String.class, mode= ParameterMode.IN)
        }
)
public class GetCurrentExchangeRateEntity {
    @Id
    @Column(name = "id")
    Integer id;
}



Repository

Код: java
1.
2.
3.
4.
5.
6.
@Repository
public interface GetCurrentExchangeRateRepository extends JpaRepository<GetCurrentExchangeRateEntity, Integer> {
    @Procedure(name = "getCurrentExchangeRate0")
    void getCurrentExchangeRate(@Param("p_div_code_list") String divCodeList);

}



Ошибку, которую получаю

Код: powershell
1.
2.
2022-02-01 10:12:50,345 WARN  [http-nio-8888-exec-2] org.hibernate.engine.jdbc.spi.SqlExceptionHelper: SQL Error: 17147, SQLState: 99999
2022-02-01 10:12:50,346 ERROR [http-nio-8888-exec-2] org.hibernate.engine.jdbc.spi.SqlExceptionHelper: Попытка присвоения имени параметра, которое не встречается в данном SQL: p_div_code_list
...
Рейтинг: 0 / 0
01.02.2022, 12:41
    #40130982
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры
IgorD,
Может все таки по классике? ОРМ и без хрпнимок?
Что за сущность на основе хранимки, да еще с параметром?
...
Рейтинг: 0 / 0
01.02.2022, 12:53
    #40130985
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры
PetroNotC Sharp,
В хранимке будет достаточно увесистый селект. Конечно можно и по другому, но хотелось бы разобраться с этим. В сети много примеров с таким подходом, предполагаю, что они рабочие, но для других баз.
...
Рейтинг: 0 / 0
01.02.2022, 13:20
    #40130990
SpringMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры
Давно оракл не трогал, но чет тип string в pl/sql смущает. Включи полный sql лог, чтобы посмотреть какой текст запроса уходит в оракл
...
Рейтинг: 0 / 0
01.02.2022, 13:37
    #40130992
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры
SpringMan,
В Application.yml есть следующие установки

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
spring:
  config:
    activate:
      on-profile: dev
  jpa:
    hibernate:
      ddl-auto: validate
    show-sql: true



Но в консоли только такая информация

Код: powershell
1.
2.
3.
4.
5.
6.
2022-02-01 12:30:55,351 INFO  [http-nio-8888-exec-2] org.apache.juli.logging.DirectJDKLog: Initializing Spring DispatcherServlet 'dispatcherServlet'
2022-02-01 12:30:55,351 INFO  [http-nio-8888-exec-2] org.springframework.web.servlet.FrameworkServlet: Initializing Servlet 'dispatcherServlet'
2022-02-01 12:30:55,353 INFO  [http-nio-8888-exec-2] org.springframework.web.servlet.FrameworkServlet: Completed initialization in 1 ms
Hibernate: {call TELEGRAMBOT.get_Current_Exchange_Rate0(?)}
2022-02-01 12:30:55,503 WARN  [http-nio-8888-exec-2] org.hibernate.engine.jdbc.spi.SqlExceptionHelper: SQL Error: 17147, SQLState: 99999
2022-02-01 12:30:55,504 ERROR [http-nio-8888-exec-2] org.hibernate.engine.jdbc.spi.SqlExceptionHelper: Попытка присвоения имени параметра, которое не встречается в данном SQL: p_div_code_list
...
Рейтинг: 0 / 0
01.02.2022, 13:41
    #40130995
Alexander A. Sak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры
Регистрозависимость? В базе-то имена в верхнем регистре, если явно не указано в кавычках.

Ну и как-то вообще странно выглядит процедура get_XXX, которая ничего ниоткуда не возвращает.
...
Рейтинг: 0 / 0
01.02.2022, 13:50
    #40130997
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры
включите лог хибернейта, что бы он запросы отсылаемые на сервер показывал
тогда будет понятно, что именно хочет выполнить хибер, есть ли в данном запросе данные параметры или нет

Query (по названию анотации) из процедуры без параметров - выглядит как-то странно
...
Рейтинг: 0 / 0
01.02.2022, 13:51
    #40131000
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры
p.s. ну и да, string в Oracle? вообще-то всю жизнь было varchar2
...
Рейтинг: 0 / 0
01.02.2022, 13:53
    #40131001
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры
Да. Для вызова хранимок ORM выглядит как минимум странно.

Пожалуй редкое исключение - Oracle pipeline function (генератор табличных строк), но в нашем случае - молчаливая процедура которая ничего не возвращает.

По идее в сигнатуре процедуры пропущен тип возвращаемого параметра. Ошибка?

Обществу нужны разъяснения.
...
Рейтинг: 0 / 0
01.02.2022, 13:53
    #40131002
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры
Alexander A. Sak,
Это процедура "заглушка", что бы разобраться с методом вызова хранимых процедур. В дальнейшем будет курсор на выход.
Пробовал параметры с разными регистрами - ошибка та же.

Меня смущает вызов процедуры
Код: java
1.
Hibernate: {call TELEGRAMBOT.get_Current_Exchange_Rate0(?)}



если бы был вариант
Код: java
1.
Hibernate: {call TELEGRAMBOT.get_Current_Exchange_Rate0(p_div_code_list => :p_div_code_list)}


то в таком случае обращение к параметру по имени было бы уместно
...
Рейтинг: 0 / 0
01.02.2022, 13:55
    #40131003
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры
Дружище, давай сразу процедуру с курсором.

А то получается что ты захотел "странного".
...
Рейтинг: 0 / 0
01.02.2022, 13:57
    #40131006
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры
IgorD
PetroNotC Sharp,
В хранимке будет достаточно увесистый селект. Конечно можно и по другому, но хотелось бы разобраться с этим. В сети много примеров с таким подходом, предполагаю, что они рабочие, но для других баз.

1. Предполагаю, что примеры для MS SQL Server
2. Для Oracle примеры тоже есть, но RefCursor возвращать нужно явно
первый пример по поиску из googlе для Oracle:
https://www.logicbig.com/tutorials/java-ee-tutorial/jpa/named-stored-procedure.html
...
Рейтинг: 0 / 0
01.02.2022, 14:01
    #40131007
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры
IgorD

Hibernate: {call TELEGRAMBOT.get_Current_Exchange_Rate0(?)}

callByIndex ?
...
Рейтинг: 0 / 0
01.02.2022, 14:56
    #40131022
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры
IgorD
PetroNotC Sharp,
В хранимке будет достаточно увесистый селект. Конечно можно и по другому, но хотелось бы разобраться с этим. В сети много примеров с таким подходом, предполагаю, что они рабочие, но для других баз.

В каждом слове противоречия.
Я насчитал штук 10.
Почему не учится по хорошим юскейсам?
Зачем на винигрете:
- увесистый селект
- с параметром
- с курсором)))))
- оракл
- хибер, jpa
.....
А вьюха не заменит тебе курсор?)))))
...
Рейтинг: 0 / 0
01.02.2022, 15:19
    #40131034
IgorD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры
PetroNotC Sharp,
Полностью согласен с написанным. Но на этом примере хочу научится использовать хранимки. Имею привычку писать бизнеслогику на хранимках сервера :).
...
Рейтинг: 0 / 0
01.02.2022, 15:59
    #40131043
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры
Это похвально. Но давай боевой код. А-то какие-то игрушки детские разбираем.
...
Рейтинг: 0 / 0
01.02.2022, 17:18
    #40131076
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры
IgorD
PetroNotC Sharp,
Полностью согласен с написанным. Но на этом примере хочу научится использовать хранимки. Имею привычку писать бизнеслогику на хранимках сервера :).
ну дык я сам начинал с этого. Дельфя + оракле хранимки.
Только зачем из ХП делать сущности?
Тут в java. никто особо не рвался изучать хранимки))))
...
Рейтинг: 0 / 0
02.02.2022, 08:50
    #40131155
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры
IgorD
PetroNotC Sharp,
Полностью согласен с написанным. Но на этом примере хочу научится использовать хранимки. Имею привычку писать бизнеслогику на хранимках сервера :).


Когда зачем Hibernate и Spring-Data-Jpa?
Это для работы с логикой в ХП лишнее.
ИМХО можно взять Spring-Data-Jdbc и не страдать фигней.

<:o)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring boot + Hibernate + Oracle Stored Procedure. Не распознает параметры / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]