2012-04-29 19 views
5

Sto provando a eseguire un ciao mondo per: Spring/Hibernate con pool di connessioni HSQLDB e C3PO. lo stesso codice funziona con mySQL (solo con dialetto e driver diversi)'hibernate.dialect' deve essere impostato quando nessuna connessione disponibile

Ho eseguito il database e posso collegarlo ad esso con la GUI swing. Ma quando provo a eseguire la mia applicazione, sto ricevendo un errore di avvio. Ecco i dettagli:

1: l'errore -

INFORMAZIONI: Inizializzazione Spring radice WebApplicationContext [ERRORE] [pool-2-thread-1 05:20:08] (JDBCExceptionReporter.java: logExceptions: 101) Non è stato possibile acquisire le connessioni dal database sottostante! [ERRORE] [pool-2-thread-1 05:20:08] (ContextLoader.java:initWebApplicationContext:220) Inizializzazione del contesto non riuscita org.springframework.beans.factory.BeanCreationException: errore durante la creazione del bean con il nome 'sessionFactory' definito nella risorsa ServletContext [/WEB-INF/hibernate-context.xml]: invocazione del metodo init fallita; l'eccezione nidificata è org.hibernate.HibernateException: 'hibernate.dialect' deve essere impostato quando nessuna connessione è disponibile in org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1420) all'indirizzo 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" /> 

risposta

0

ho proprietà della sessione di fabbrica con hibernate. prefisso.

<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

Incredibilmente ha fatto qualcosa. non risolve il problema ma ora ottengo: [ERRORE] [pool-2-thread-1 06:03:04] (JDBCExceptionReporter.java:logExceptions:101) Le connessioni non potevano essere acquisite dal database sottostante !, ma io sono certo che non ha nulla a che fare con il vero problema che sta nascondendo lì sotto. – Gleeb

+0

@gleeb Scrivere un semplice programma usando JDBC per connettersi al proprio DB HSQL e vedere se funziona. Ciò potrebbe almeno eliminare un problema – Sudhakar

+0

Eseguire il server con silent = false e controllare il tentativo di connessione.Prova p: user = "SA" – fredt

1

Per quanto posso dire, non è possibile passare in dialetto come un valore impostato sul campo hibernateProperties di una sessione di fabbrica Primavera, almeno se si utilizza anche la proprietà configLocation su di esso.

mio 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...] 

mio rilevanti config contesto di sessione fabbrica:

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

Se Rimuovere il commento dalla prop dialetto nel file di contesto, e commento fuori da nel hibernate.cfg.xml ho riscontrato la stessa eccezione dell'OP:

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

Tuttavia se corro con e sopra la configurazione (commentata nel file di contesto, non commentata nel file hibernate.cfg.xml), funziona, e vedo il codice hibernate formattato SQL, che mostra che le altre proprietà di ibernazione vengono impostate dal file di contesto.

Problemi correlati