H2:当名称中有数字时找不到列

Posted

技术标签:

【中文标题】H2:当名称中有数字时找不到列【英文标题】:H2 : Column not found when name has number in it 【发布时间】:2015-09-23 11:47:29 【问题描述】:

我的数据库表中有一个名为“1GNics”的列。我可以使用以下 SQL 在 H2 中创建表

CREATE TABLE resource( ... 1GNics int DEFAULT NULL, ... );

这将创建具有正确列名的表,但如果我尝试进行选择,它会采用如下的 select 语句并尝试从表中选择前 1 个

SELECT 1 GNics from RESOURCE;

即使选择语句读取

SELECT 1GNics from RESOURCE;

我正在使用休眠来访问数据库,因此它会自动生成选择语句。有没有办法在不将列名更改为“oneGNics”的情况下选择它?

【问题讨论】:

您是否尝试用引号将列名括起来:SELECT "1GNics" from RESOURCE; 或单引号 SELECT '1GNics' from RESOURCE; 是的,我已经尝试过了,它可以工作,但问题是休眠在我的代码中生成 SQL 选择语句,因此它不会生成列名为“1GNics”的选择语句,它不加引号 是的,抱歉,我没有注意到查询的自动生成。如果您无法更改列名,可能需要通过手动编写本机/HQL 查询来解决此问题。这实际上似乎是 Hibernate 和/或 H2 驱动程序中的一个错误。列名看起来像有效的 ANSI-SQL。 好的,仔细查看H2 grammar guide,似乎列名必须以A-Z 开头(不区分大小写),除非在您创建表时它们是quoted。所以,你基本上在那里有一个无效的列标识符。 【参考方案1】:

您可以使用HQL并使用如下查询

session.createQuery("SELECT \"1GNics\" from RESOURCE");

【讨论】:

【参考方案2】:

这里是查询:

SELECT r.1GNics from RESOURCE AS r;

您可以使用Table 的别名。

【讨论】:

Hibernate 在生成语句时使用别名,所以这不起作用 你可以试试 SELECT 1GNics from RESOURCE;查询也是如此。我无法显示符号,因为 SO 将其用作代码标识符。

以上是关于H2:当名称中有数字时找不到列的主要内容,如果未能解决你的问题,请参考以下文章

将图像名称传递给vue组件时找不到图像

H2 JdbcSQLException:“找不到表”,带有驼峰表和实体名称

接收TS2304:找不到名称'文件'| TS2304:运行“npm run tsc”命令时找不到名称“ReadableStream”

Flask扭曲运行时找不到模板目录

使用 spring r2dbc 时找不到 javax.persistence 注释

Django在重定向时找不到模式名称