gpt4 book ai didi

spring - 没有可用连接时必须设置“hibernate.dialect”

转载 作者:行者123 更新时间:2023-12-04 21:48:29 25 4
gpt4 key购买 nike

我正在尝试为以下内容运行 hello world:带有 HSQLDB 和 C3PO 连接池的 Spring/Hibernate。
相同的代码适用于 mySQL(仅适用于不同的方言和驱动程序)

我已经运行了数据库,并且可以使用 Swing GUI 连接到它。但是当我尝试运行我的应用程序时,出现启动错误。
以下是详细信息:

1:错误 -

INFO: Initializing Spring root WebApplicationContext [ERROR] [pool-2-thread-1 05:20:08] (JDBCExceptionReporter.java:logExceptions:101) Connections could not be acquired from the underlying database! [ERROR] [pool-2-thread-1 05:20:08] (ContextLoader.java:initWebApplicationContext:220) Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/hibernate-context.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection avalable at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) ... ...



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" />

最佳答案

据我所知,不可能将方言作为在 Spring Session Factory 的 hibernateProperties 字段上设置的值传递,至少如果您还使用 configLocation其上的属性(property)。

我的 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...]

我的相关 session 工厂上下文配置:
<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>

如果我取消注释上下文文件中的方言 Prop ,并从 hibernate.cfg.xml 文件中将其注释掉,我会遇到与 OP 相同的异常:
Caused by: org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set

但是,如果我使用上述配置运行(在上下文文件中注释掉,在 hibernate.cfg.xml 中未注释),它就可以工作,并且我看到格式化的 hibernate SQL,表明其他 hibernate 属性正在由上下文文件设置.

关于spring - 没有可用连接时必须设置“hibernate.dialect”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10372924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com