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: Invalid object name」の考えられるすべての理由を教えてください....?

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

次のように 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")); 
    }

これは、明らかな間違いを指摘するのに役立ちます。スキーマとその他の変数が実際に正しいことを再確認してください。

于 2015-08-11T11:03:15.437 に答える