簡體   English   中英

無法使用Spring 4和Hibernate 4建立到Oracle 11g的連接

[英]Cannot create connection to Oracle 11g with Spring 4 and Hibernate 4

我的應用程序使用的是Spring 4,Hibernate 4,Java 1.7。 這是桌面應用程序,而不是Web應用程序,因此不涉及服務器。 我正在嘗試創建與數據庫的連接。 為簡潔起見-我無法復制和粘貼-我將一些非必要的內容留給了問題。 這是我的春季配置:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="oracle.jdbc.OracleDriver" />
    <property name="jdbcUrl" value="jdbc:oracle:thin:@dbServer:1521:service" />
    <property name="properties">
        <props>
            <prop key="user">user</prop>
            <prop key="password">password</prop>
        </props>
    </property>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="com.help.please" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.connection.autocommit">true</prop>
        </props>
    </property>

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

我已經將sessionFactory自動連接到DAO中。 當我嘗試從sessionFactory獲取連接時,日志看起來像這樣(再次縮短):

INFO [main] C3P0Registry:216 Initializing c3p0-0.9.2.1 [built 20-March-2013 10:47:27 +0000; debug? true; trace: 10]
INFO [main] Version:66 - HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
INFO [main] Version:54 - HHH000412: Hibernate Core {4.3.8.Final}
INFO [main] Environment:224 - HHH000205: Loaded properties from resource hibernate.properties: {hibernate.connection.driver_class=org.h2.Driver, hibernate.service.allow_crawling=false, hibernate.dialect=org.hibernate.dialect.H2Dialect, hibernate.max_fetch_depth=5, hibernate.format_sql=true, hibernate.generate_statistics=true, hibernate.connection.username=sa, hibernate.connection.url=jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1;MVCC=TRUE, hibernate.bytecode.use_reflection_optimizer=false, hibernate.jdbc.batch_versioned_data=true, hibernate.connection.pool_size=5}
INFO [main] Environment:346 - HHH000021: Bytecode provider name : javassist
INFO [main] AbstractPoolBackedDataSource:522 - Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailer -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> [mumbo jumbo], debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> oracle.jdbc.OracleDriver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> [mumbo jumbo], idleConnectionTestPeriod -> 0, initialPoolSize -> 3, jdbcUrl -> jdbc:oracle:thin:@dbServer:1521:service, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> maxPoolSize -> 15, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, numHelperThreads -> 3, preferredTestQuery -> null, properties -> {user=****, password=********}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ]
WARN [main] JdbcServicesImpl:204 - HHH000342: Could not obtain connection to query metadata : ORA-01017: invalid username/password; logon denied

我可以成功地使用其他應用程序以及SQL Developer使用該用戶登錄數據庫。 我已經多次確保用戶名/密碼正確 我試過同時使用ojdbc6.jarojdbc7.jar ,希望可能是那樣。 我進行了一些研究,發現可能是用戶名/密碼在發送給Oracle之前可能會自動被大寫,但是我知道有一種驗證方法。

可能很重要的一點是,當我使用Spring 3和Hibernate 3時,此代碼可以很好地連接到數據庫。有關如何解決此問題的任何建議?

編輯

重要的是要注意,我正在使用批注和xml的組合來配置我的項目。 我正在使用@Autowired注入我的服務,Dao和會話工廠。 我在dao層中使用@Transactional@Repository 我不知道這是否有所不同,但是請參閱下面的答案,以了解如何使它起作用。

我發現我需要在我的spring sessionFactory bean中添加一個hibernate.cfg.xml文件。

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="connection.url">jdbc:oracle:thin:@dbServer:1521:service</property>
        <property name="connection.username">user</property>
        <property name="connection.password">password</property>
        <property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
        <property name="hibernate.connection.autocommit">true</property>
        <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <property name="hibernate.show_sql">true</property>
    </session-factory>
</hibernate-configuration>

現在,我的spring配置更改為如下所示:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="oracle.jdbc.OracleDriver" />
    <property name="jdbcUrl" value="jdbc:oracle:thin:@dbServer:1521:service" />
    <property name="user" value="user" />
    <property name="password" value="password" />
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="com.help.please" />
    <property name="configLocation">
        <value>classpath:com.help.please/hibernate.cfg.xml</value>
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

我不太確定為什么可以這樣做,但我認為對我的解釋是,這些屬性並沒有全部傳遞給Hibernate,因此像這樣配置Hibernate和Spring這樣可以幫助它正確配置所需的配置。 如果我錯了,請隨時糾正我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM