2012-04-29 9 views
5

私はHello Worldを実行しようとしています:HSQLDBとC3PO接続プールのSpring/Hibernate。 同じコードがmySQLで動作します(異なる方言とドライバでのみ)Connectionが利用できない場合は、 'hibernate.dialect'を設定する必要があります。

私はデータベースを実行しました。私はそれをswing GUIで接続できます。しかし、アプリケーションを実行しようとすると、起動エラーが発生します。

1: ここで詳細なエラー -

INFO:初期スプリングルートWebApplicationContext [ERROR] [プール-2-スレッド-1五時20分08秒](JDBCExceptionReporter.java: logExceptions:101)基になるデータベースから接続を取得できませんでした。 [エラー] [プール2スレッド1 05:20:08](ContextLoader.java:initWebApplicationContext:220)コンテキストの初期化に失敗しました org.springframework.beans.factory.BeanCreationException: 'sessionFactory'という名前のBeanを作成中にエラーが発生しましたServletContextリソース[/WEB-INF/hibernate-context.xml]:initメソッドの呼び出しに失敗しました。ネストされた例外はorg.hibernate.HibernateExceptionです:Connectionが使用可能でない場合、 'hibernate.dialect'を設定する必要があります。 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420) at org.springframework.beans .factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) ... ...

2:休止状態-のcontext.xml -

<tx:annotation-driven transaction-manager="transactionManager" /> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="packagesToScan" value="com.gleeb.sample.model" /> 
    <property name="hibernateProperties"> 
     <props> 
      <!-- <prop key="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> --> 
      <prop key="dialect">org.hibernate.dialect.HSQLDialect</prop> 
      <prop key="show_sql">false</prop> 
      <prop key="hbm2ddl.auto">create</prop> 
     </props> 
    </property> 
</bean> 

     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
    destroy-method="close" p:driverClass="org.hsqldb.jdbc.JDBCDriver" 
    p:jdbcUrl="jdbc:hsqldb:hsql://localhost/testdb" p:user="sa" 
    p:password="" p:acquireIncrement="5" p:idleConnectionTestPeriod="60" 
    p:maxPoolSize="100" p:maxStatements="50" p:minPoolSize="10" /> 

<!-- Declare a transaction manager --> 
<bean id="transactionManager" 
    class="org.springframework.orm.hibernate3.HibernateTransactionManager" 
    p:sessionFactory-ref="sessionFactory" /> 

答えて

0

私はとのセッションファクトリー・プロパティーを持っています接頭辞はです。あなたもそれにconfigLocationプロパティを使用している場合は、少なくとも

<property name="hibernateProperties"> 
    <value> 
     hibernate.dialect=org.hibernate.dialect.HSQLDialect 
     hibernate.hbm2ddl.auto=update 
     hibernate.show_sql=false 
     hibernate.format_sql=false 
    </value> 
</property> 
+0

驚いたことに、何かしました。 [ERROR] [プール2スレッド1 06:03:04](JDBCExceptionReporter.java:logExceptions:101)接続は基盤となるデータベースから取得できませんでしたが、私は問題を解決しませんでした。そこに隠れている本当の問題とは何の関係もないのです。 – Gleeb

+0

@gleeb JDBCを使って簡単なプログラムを書いてHSQL DBに接続し、それが動作するかどうかを確認します.1つの問題を少なくとも削除できます – Sudhakar

+0

silent = falseでサーバを実行し、接続の試みを確認してください。p:user = "SA"を試してください – fredt

1

私の知る限り、春のセッションファクトリーのhibernatePropertiesフィールドに設定された値として、方言に渡すことはできません。

私はhibernate.cfg.xml:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
<session-factory> 

    <property name="hibernate.dialect">org.hibernate.dialect.DB2Dialect</property> 
    <property name="hibernate.search.autoregister_listeners">false</property> 
    [etc...] 

マイ関連セッションファクトリのコンテキストの設定:

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="configLocation"> 
     <value>classpath:hibernate.cfg.xml</value> 
    </property> 
    <property name="dataSource" ref="dataSource"/> 
     <property name="hibernateProperties"> 
     <props> 
      <!--<prop key="hibernate.dialect">org.hibernate.dialect.DB2Dialect</prop>--> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.format_sql">true</prop> 
      <prop key="hibernate.generate_statistics">false</prop> 
      <prop key="hibernate.default_schema">xxx</prop> 
     </props> 
    </property> 
</bean> 

私は、コンテキスト・ファイル内の方言の小道具のコメントを外し、そして中からそれをコメントアウトした場合hibernate.cfg.xmlファイル私はOPと同じ例外が発生します:

Caused by: org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set 

私はth (コンテキストファイルでコメントアウトされ、hibernate.cfg.xmlでコメントアウトされています)、動作し、フォーマットされたhibernate SQLを参照して、他のhibernateプロパティがコンテキストファイルによって設定されていることを示します。

関連する問題