Экранирование двоеточий в спящем режиме createSQLQuery - PullRequest
2 голосов
/ 17 января 2011

Я запутался в том, как создать оператор SQL, содержащий двоеточия. Я пытаюсь создать представление и использую (обратите внимание на двойные двоеточия):

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

Очевидно, что hibernate путает мои двоеточия с именованными параметрами.

Есть ли способ избежать двоеточий (предложение Google, в котором упоминается, что одиночное двоеточие экранировано как двойное двоеточие, НЕ работает) или другой способ выполнить это утверждение?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 17 января 2011

метод executeUpdate() предназначен не для операторов DDL как CREATE VIEW, а для операторов DML как UPDATE

вместо этого вы должны получить простое соединение JDBC, может быть из Session с s.connection() и выполнить оператор SQL.

Connection connection = s.connection();
Statment statment = connection .createStatement();
try {
statment .execute("CREATE VIEW ...");
} finally {
 statment .close();
}
0 голосов
/ 15 марта 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...