4

自上次 2-3 小时以来,我一直在使用我的应用程序。突然开始关注异常。

Caused by: org.hibernate.exception.SQLGrammarException: could not execute query
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.loader.Loader.doList(Loader.java:2216)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
    at org.hibernate.loader.Loader.list(Loader.java:2099)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    at com.k2.util.HibernateQuery.execute(HibernateQuery.java:32)
    ... 107 more
 Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'EMP_INFO_TBL'.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:156)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1373)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:371)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:322)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4003)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1550)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:160)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:133)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:265)
    at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:342)
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
    at org.hibernate.loader.Loader.doQuery(Loader.java:674)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    at org.hibernate.loader.Loader.doList(Loader.java:2213)

该表以正确的模式存在于我的数据库中(仅使用默认值,即 dbo)。所有权限都已到位。用连接池检查也正常。通过 JMX 控制台,我尝试测试也可以工作的数据库连接。

即使在重新启动 JBoss 服务器后也会出现此异常。使用 JBoss6、JDK 6、MSSQL 服务器。谁能告诉我“com.microsoft.sqlserver.jdbc.SQLServerException:无效的对象名称”的所有可能原因......?

4

4 回答 4

0

你的环境有什么变化吗?您现在可能需要在 xml 配置中指定架构(请参阅使用 Hibernate 和 SQL Server 2008 的问题

如果您在 sql 中的 Hibernate 中创建 sql 查询,您还需要添加您的目录(数据库名称)和模式:

例如:
executeQuery("select * from products;")

会成为

executeQuery("select * from yourDatabase.dbo.products;")

于 2014-06-26T08:08:32.690 回答
0

我有类似的问题。完全相同的查询“...executeQuery("select * from products;");”在 RazorSQL 上运行正常,另一个对 MySQL 的查询在相同的代码中运行正常。所以这不应该是错误查询的问题。

于 2013-02-06T04:32:52.700 回答
0

我遇到了同样的错误。我正在连接到另一个数据库,该数据库没有我在代码中引用的表和架构。

设置databaseNameinspring.datasource.urlspring.datasource.usernameto correct 值修复了错误。

于 2018-07-22T13:08:02.467 回答
0

您可以像这样检查您的数据库元数据:

DatabaseMetaData meta = connection.getMetaData();
ResultSet res = meta.getTables(null, null, "YourTableName", new String[] {"TABLE"});
    while (res.next()) {
        System.out.println(
               "   "+res.getString("TABLE_CAT") 
               + ", "+res.getString("TABLE_SCHEM")
               + ", "+res.getString("TABLE_NAME")
               + ", "+res.getString("TABLE_TYPE")
               + ", "+res.getString("REMARKS")); 
    }

这应该有助于指出任何明显的错误。仔细检查您的架构和其他变量是否确实正确。

于 2015-08-11T11:03:15.437 回答