Я смущен тем, как я могу создать инструкцию SQL, содержащую двоеточия. Я пытаюсь создать представление, и я использую (обратите внимание на двойные двоеточия):Escapeing colons in hibernate createSQLQuery
create view MyView as (
SELECT
tableA.colA as colA,
tableB.colB as colB,
round(tableB.colD/1024)::numeric, 2) as calcValue,
FROM
tableA, tableB
WHERE
tableA.colC = 'someValue'
);
Это запрос Postgres и я вынужден использовать двойные двоеточия (: :), чтобы правильно выполнить инструкцию ,
Я затем передать вышеуказанное заявление через:
s.createSQLQuery(myQuery).executeUpdate();
и я получаю:
Exception in thread "main" org.hibernate.exception.DataException: \
could not execute native bulk manipulation query
at org.hibernate.exception.SQLStateConverter.convert(\
SQLStateConverter.java:102)
... more stacktrace...
с выходом моего выше заявление изменилось, как (обратите внимание на знак вопроса):
create view MyView as (
SELECT
tableA.colA as colA,
tableB.colB as colB,
round(tableB.colD/1024)?, 2) as calcValue,
FROM
tableA, tableB
WHERE
tableA.colC = 'someValue'
);
Очевидно, что спящий режим смущает мои двоеточия с именованными параметрами.
Есть ли способ избежать двоеточия (предложение google, в котором упоминается, что один двоеточие скрывается, поскольку двойной двоеточие НЕ работает) или другой способ запуска этого утверждения?
Спасибо.
Я думаю, что сделал. Но нет ли способа нормально разобрать двоеточия (если бы я был упрям и хотел использовать начальный путь?) – stratosgear
@Stratosgear Вы можете обойти его с помощью синтаксиса 'CAST' SQL-стандарта, например' CAST (round (tableB.colD/1024) AS числовой) ' –