gpt4 book ai didi

java - 使用 native SQL 创建表适用于 Hibernate/HSQLDB,插入失败。为什么?

转载 作者:行者123 更新时间:2023-12-02 00:39:31 25 4
gpt4 key购买 nike

我使用 HSQLDB 和 Hibernate。我必须在数据库级别实现一些功能(触发...),因此我必须执行一些 native SQL。我创建一个新表(有效),然后尝试插入一些数据(失败)。我以 SA 的身份执行此操作,这样就不会有访问权违规。有人可以猜出为什么抛出用户缺乏权限或未找到对象:A492Interface

这是我的代码(简化):

session.createSQLQuery("CREATE TABLE entity_table_map (entity_name VARCHAR(50) NOT NULL PRIMARY KEY,table_name VARCHAR(50) NOT NULL)").executeUpdate();
session.createSQLQuery("INSERT INTO entity_table_map (entity_name,table_name) VALUES (\"A429Interface\",\"interface\")").executeUpdate();

以下是相关日志:

[Server@19616c7]: 0:SQLCLI:SQLPREPARE CREATE TABLE entity_table_map (entity_name VARCHAR(50) NOT NULL PRIMARY KEY,table_name VARCHAR(50) NOT NULL)
[Server@19616c7]: 0:SQLCLI:SQLEXECUTE:5
[Server@19616c7]: 0:SQLCLI:SQLFREESTMT:5
[Server@19616c7]: 0:HSQLCLI:GETSESSIONATTR
[Server@19616c7]: 0:SQLCLI:SQLPREPARE INSERT INTO entity_table_map (entity_name,table_name) VALUES ("A492Interface","interface")
[Server@19616c7]: [Thread[HSQLDB Connection @13adc56,5,HSQLDB Connections @19616c7]]: 0:disconnected SA

这里有一个异常(exception):

Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not execute native bulk manipulation query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:219)
at org.hibernate.impl.SessionImpl.executeNativeUpdate(SessionImpl.java:1310)
at org.hibernate.impl.SQLQueryImpl.executeUpdate(SQLQueryImpl.java:396)
at version.api.VersionAPI.setupDatabase(VersionAPI.java:38)
at test.ui.VersionUI.setupDatabase(VersionUI.java:107)
at test.SetupDatabase.main(SetupDatabase.java:9)
Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: A492Interface
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:534)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:116)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109)
at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:202)
... 5 more

更新:我似乎无法执行任何插入语句。如果我尝试将数据插入到其他表中,也会失败。我一定是在做一些非常愚蠢的事情......但我没看到......

最佳答案

OP提到的错误的详细信息。

session.createSQLQuery("INSERT INTO entity_table_map (entity_name,table_name) 
VALUES (\"A429Interface\",\"interface\")").executeUpdate();

在上面的SQL语句中,插入的两个值都是字符串,因此必须使用单引号(字符串的SQL引号字符)。

当使用双引号(变量、列和表名称的 SQL 引号字符)时,引擎期望找到名为“A429Interface”、“interface”的变量来插入到表中。由于不存在此类变量,因此报告用户缺乏权限或未找到对象:A492Interface

关于java - 使用 native SQL 创建表适用于 Hibernate/HSQLDB,插入失败。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6774095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com