我对如何创建包含冒号的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会将我的冒号与命名参数混淆。
有没有办法逃避冒号(一个谷歌建议,提到单个冒号被转义为双冒号不起作用)或另一种方式运行此声明?
感谢。
答案 0 :(得分:4)
executeUpdate()
方法不是针对CREATE VIEW
的DDL语句,而是针对DML语句UPDATE
您应该获取一个普通的JDBC连接,可以来自Session
s.connection()
并运行您的SQL语句。
Connection connection = s.connection();
Statment statment = connection .createStatement();
try {
statment .execute("CREATE VIEW ...");
} finally {
statment .close();
}
答案 1 :(得分:0)