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 在生成语句时使用别名,所以这不起作用 你可以试试 SELECT1GNics
from RESOURCE;查询也是如此。我无法显示符号,因为 SO 将其用作代码标识符。以上是关于H2:当名称中有数字时找不到列的主要内容,如果未能解决你的问题,请参考以下文章
H2 JdbcSQLException:“找不到表”,带有驼峰表和实体名称
接收TS2304:找不到名称'文件'| TS2304:运行“npm run tsc”命令时找不到名称“ReadableStream”