5

HSQLDBおよびC3PO接続プールを使用したSpring/HibernateのHelloWorldを実行しようとしています。同じコードがmySQLで機能します(異なる方言とドライバーでのみ)

データベースを実行し、swingGUIを使用してデータベースに接続できます。しかし、アプリケーションを実行しようとすると、起動エラーが発生します。詳細は次のとおりです。

1:エラー-

情報:SpringルートWebApplicationContextを初期化しています[エラー] [pool-2-thread-1 05:20:08](JDBCExceptionReporter.java:logExceptions:101)基盤となるデータベースから接続を取得できませんでした![エラー][pool-2-thread-105:20:08](ContextLoader.java:initWebApplicationContext:220)コンテキストの初期化に失敗しましたorg.springframework.beans.factory.BeanCreationException:ServletContextで定義された「sessionFactory」という名前のBeanの作成中にエラーが発生しましたリソース[/WEB-INF/hibernate-context.xml]:initメソッドの呼び出しに失敗しました。ネストされた例外はorg.hibernate.HibernateExceptionです:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)で接続が利用できない場合は、「hibernate.dialect」を設定する必要があります。 。サポート。

2:hibernate-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" />
4

2 に答える 2

1

私が知る限り、Spring Session Factory の hibernateProperties フィールドに設定された値として方言を渡すことはできません。少なくとも、そのconfigLocationプロパティも使用している場合はそうです。

私の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

ただし、上記の構成 (コンテキスト ファイルでコメント アウト、hibernate.cfg.xml でコメント解除) で実行すると動作し、書式設定された hibernate SQL が表示され、他の hibernate プロパティがコンテキスト ファイルによって設定されていることが示されます。 .

于 2012-08-02T00:22:39.337 に答える
0

hibernate.プレフィックス付きのセッション ファクトリ プロパティがあります。

<property name="hibernateProperties">
    <value>
        hibernate.dialect=org.hibernate.dialect.HSQLDialect
        hibernate.hbm2ddl.auto=update
        hibernate.show_sql=false
        hibernate.format_sql=false
    </value>
</property>
于 2012-04-29T14:57:59.053 に答える