1

最初のHibernateプロジェクトのセットアップ中に問題が発生しました。チュートリアルに従い、コードを起動するとスタックします。何が起こるかというと、HSQLDBとの接続を開始すると、プログラムがスタックするということです。エラーメッセージは表示されません。
コンソールでの詳細な出力は次のとおりです。

172 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final
172 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.6.10.Final
172 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found
187 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
187 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
265 [main] INFO org.hibernate.cfg.Configuration - configuring from resource: /hibernate.cfg.xml
265 [main] INFO org.hibernate.cfg.Configuration - Configuration resource: /hibernate.cfg.xml
375 [main] INFO org.hibernate.cfg.Configuration - Reading mappings from resource : org/itg/ACLwithHibernate/User.hbm.xml
484 [main] INFO org.hibernate.cfg.Configuration - Configured SessionFactory: null

これで構成されたので、buildSessionFactory()を呼び出します。

562 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: org.itg.ACLwithHibernate.User -> USER
577 [main] INFO org.hibernate.cfg.Configuration - Hibernate Validator not found: ignoring
593 [main] INFO org.hibernate.cfg.search.HibernateSearchEventListenerRegister - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
593 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - Using Hibernate built-in connection pool (not for production use!)
593 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - Hibernate connection pool size: 10
593 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - autocommit mode: false
609 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - using driver: org.hsqldb.jdbcDriver at URL: jdbc:hsqldb:hsql://localhost:9001
609 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - connection properties: {user=sa, password=****}

そして...それ以上は何もありません。main()クラスの次の命令に進むことはありません。どこかで立ち往生しています。デバッグすると、次のようになります。

デバッガーの概要

これが私のhibernate.cfg.xmlです:

<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
        <property name="connection.url">jdbc:hsqldb:hsql://localhost:9001</property>
        <property name="connection.username">sa</property>
        <property name="connection.password"></property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">10</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.HSQLDialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">update</property>

        <mapping resource="org/itg/ACLwithHibernate/User.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

HSQLDBサーバーが実行され、次のように出力されます。

[Server@3ed5dee4]: [Thread[org.hsqldb.Server.main(),5,org.hsqldb.Server]]: checkRunning(false) entered
[Server@3ed5dee4]: [Thread[org.hsqldb.Server.main(),5,org.hsqldb.Server]]: checkRunning(false) exited
[Server@3ed5dee4]: Startup sequence initiated from main() method
[Server@3ed5dee4]: Loaded properties from [C:\Users\dbr\workspace\test_hibernate\server.properties]
[Server@3ed5dee4]: Initiating startup sequence...
[Server@3ed5dee4]: Server socket opened successfully in 0 ms.
[Server@3ed5dee4]: Database [index=0, id=0, db=file:target/data/tutorial, alias=] opened sucessfully in 630 ms.
[Server@3ed5dee4]: Startup sequence completed in 640 ms.
[Server@3ed5dee4]: 2012-07-18 12:36:53.717 HSQLDB server 2.0.0 is online on port 9001
[Server@3ed5dee4]: To close normally, connect and execute SHUTDOWN SQL
[Server@3ed5dee4]: From command line, use [Ctrl]+[C] to abort abruptly

server.silent = falseの場合、クライアントが接続すると、さらに次のようになります。

[Thread[HSQLDB Server @1af5458a,5,org.hsqldb.Server]]: handleConnection(Socket[addr=/127.0.0.1,port=49438,localport=9001]) entered
[Thread[HSQLDB Server @1af5458a,5,org.hsqldb.Server]]: handleConnection() exited
[Thread[HSQLDB Connection @9437a04,5,HSQLDB Connections @1af5458a]]: ODBC client connected.  ODBC Protocol Compatibility Version 0.0

以前に同様の問題が発生したことがありますか?何が悪いのか考えていますか?
事前にどうもありがとうございました。
ダニー

4

2 に答える 2

3

HSQLDB サーバーを Hibernate または他のフレームワークで使用する場合、クライアントとサーバーが使用する HSQLDB jar のバージョンを確認し、それらが同じバージョンの HSQLDB であることを確認することが不可欠です。また、最新バージョンの HSQLDB を使用する必要があります。

server.silent=falseプロパティを使用して(またはsilent=falseコマンド ライン引数として) HSQLDB サーバーを起動すると、HSQLDB サーバーのトラブルシューティングが容易になります。これにより、試行された接続が表示されます。

この例では、サーバーは以下を示しています。

[Thread[HSQLDB Connection @9437a04,5,HSQLDB Connections @1af5458a]]: 
      ODBC client connected.  ODBC Protocol Compatibility Version 0.0

これは、ODBC が実際には Java から HSQLDB への接続に使用されていないため、バージョンの非互換性の問題を示しています。

于 2012-07-19T11:45:07.577 に答える
0

DBへの接続でスタックしました。デバッグのために、構成から接続プール サイズの要素を削除し、hbmtoddl を false に設定します。

于 2012-07-18T12:15:22.497 に答える