1

ストレージ用にHibernateに裏打ちされたSpringWebアプリがあります。最近、Hibernateストレージオブジェクトの1つを使用してルックアップを実行するときに問題が発生していることに気づきました。これはスタックトレースです。

org.h2.jdbc.JdbcSQLException: General error: "java.lang.RuntimeException: object already exists: TABLES"; SQL statement:
SELECT VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME=? [50000-128]
        at org.h2.message.Message.getSQLException(Message.java:110)
        at org.h2.message.Message.convert(Message.java:287)
        at org.h2.command.Parser.prepareCommand(Parser.java:256)
        at org.h2.engine.Session.prepareLocal(Session.java:417)
        at org.h2.engine.Session.prepareCommand(Session.java:378)
        at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1074)
        at org.h2.jdbc.JdbcConnection.getQueryTimeout(JdbcConnection.java:679)
        at org.h2.jdbc.JdbcStatement.getQueryTimeout(JdbcStatement.java:547)
        at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:299)
        at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:234)
        at org.hibernate.loader.Loader.doQuery(Loader.java:770)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)
        at org.hibernate.loader.Loader.doList(Loader.java:2449)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2192)
        at org.hibernate.loader.Loader.list(Loader.java:2187)
        at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452)
        at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
        at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
        at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1258)
        at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
        at com.ourapp.hibernate.HibernateDao.lookup(HibernateDao.java:173)

問題が何であるかを正確に判断するのに問題があります-SQLはTABLESオブジェクトを挿入しようとしていますか?

HibernateDao.lookup()メソッドの173行目:

172: Query query = session.createQuery("from " + entityClazz.getName() + " as entity where entity." + field + "='" + value + "'");
173: return query.list();

これは常に同じHibernateDaoインスタンス(基本的にはUsersテーブルの場合)で発生し、毎回同じアクションによってトリガーされるようですが、実際の問題が何であるかを判断できないようです。

4

2 に答える 2

1

H2の最新バージョンを使用してみてください。比較的古いバージョン(2010-01-30のバージョン1.2.128)を使用しています。より良いエラーメッセージが表示されるか、問題が解決することは間違いありません。

于 2012-06-02T16:02:17.597 に答える
0

HibernateパラメーターとSQLログをオンにします。たとえば、log4j.propertiesファイルでは次のようになります。

log4j.logger.org.hibernate=INFO, hibernate
log4j.logger.org.hibernate.SQL=DEBUG, hibernate
log4j.logger.org.hibernate.type=TRACE #******this is the most important piece
log4j.appender.hibernate=org.apache.log4j.RollingFileAppender
log4j.appender.hibernate.File=/blah/logs/hibernate.log
log4j.appender.hibernate.MaxFileSize=10024KB
log4j.appender.hibernate.MaxBackupIndex=5
log4j.appender.hibernate.layout=org.apache.log4j.PatternLayout
log4j.appender.hibernate.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n
于 2012-06-01T20:34:03.613 に答える