我从最近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:无效的对象名称" ....?
答案 0 :(得分:0)
我有类似的问题。完全相同的查询“... executeQuery(”select * from products;“);”在RazorSQL上运行正常,对MySQL的另一个查询在同一代码中运行正常。所以它不应该是错误查询的问题。
答案 1 :(得分:0)
你的环境有什么变化吗?您现在可能需要在xml配置中指定架构(请参阅Problem using Hibernate and SQL Server 2008)
如果你在sql中在Hibernate中创建sql查询,你也想要添加你的目录(数据库名称)和模式:
例如:
executeQuery(" select * from products;")
会变成
executeQuery(" select * from yourDatabase.dbo.products;")
答案 2 :(得分:0)
您可以像这样检查您的db元数据:
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"));
}
这应该有助于指出任何明显的错误。仔细检查您的架构和其他变量是否确实正确。
答案 3 :(得分:0)
我遇到了同样的错误。我连接到另一个数据库,该数据库没有我在代码中引用的表和架构。
将databaseName
和spring.datasource.url
中的spring.datasource.username
设置为正确的值可以解决该错误。