Задача следующая: выполнить с помощью Hibernate некоторый SQL-запрос к БД PostgreSQL (используя session.createSQLQuery()), использующий приведение типов с помощью "::", например:
SELECT SETVAL('mysequence'::regclass,11111)
Проблема заключается в том, что Hibernate использует двоеточие для реализации именованных параметров запроса, поэтому "::regclass" воспринимается им как параметр с именем ":regclass", что в итоге приводит к ошибке при выполнении запроса, т.к. значение для этого параметра не задано:
...
Caused by: org.hibernate.exception.DataException: Не указано значение для параметра 1.
...
Caused by: org.postgresql.util.PSQLException: Не указано значение для параметра 1.
Никаких способов экранирования двоеточия, насколько я понял, нет (соответствующий тикет висит аж с 2005 года и версии 3.1: https://hibernate.onjira.com/browse/HHH-1237, - тогда как я проверяю на версии 4.1). Хорошо хоть, что в PostgreSQL есть и другой способ приведения типов - с помощью конструкции CAST:
SELECT SETVAL(CAST('mysequence' AS regclass),11111)
Но для других БД, где в SQL применяется двоеточие для такой же или другой цели, таких замен может и не быть.
Спасибо, сэкономил время.
ОтветитьУдалитьСпасибо большое за статью! ато я уже голову сломала, пытаясь понять, почему не идет insert :)
ОтветитьУдалитьУ меня вот так получилось
ОтветитьУдалить\\:\\: