2014-06-26 136 views
2

我試着用Oracle數據庫休眠4.3.5。 但在運行期間,我收到以下問題(相同的代碼與MySQl數據庫正常工作)。休眠4.3.5不能與Oracle10g數據庫

org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure 
INFO: HHH000115: Hibernate connection pool size: 20 (min=1) 
Jun 26, 2014 10:35:46 AM org.hibernate.engine.jdbc.internal.JdbcServicesImpl configure 
WARN: HHH000341: Could not obtain connection metadata : Unsupported feature 
Jun 26, 2014 10:35:46 AM org.hibernate.engine.jdbc.internal.LobCreatorBuilder useContextualLobCreation 
INFO: HHH000422: Disabling contextual LOB creation as connection was null 
Exception in thread "main" java.lang.NullPointerException 
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:244) 
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111) 
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234) 
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206) 
at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1885) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843) 
at com.cluster.HibernateMain.main(HibernateMain.java:29) 

我的代碼是

的hibernate.cfg.xml

<hibernate-configuration> 
    <session-factory> 
    <!-- Database connection properties - Driver, URL, user, password --> 
     <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 
     <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</property> 
     <property name="hibernate.connection.username">hr</property> 
     <property name="hibernate.connection.password">hr</property> 
     <property name="hibernate.hbm2ddl">create</property> 


     <!-- org.hibernate.HibernateException: No CurrentSessionContext configured! --> 
     <property name="hibernate.current_session_context_class">thread</property> 

     <!-- Outputs the SQL queries, should be disabled in Production --> 
     <property name="hibernate.show_sql">true</property> 

     <!-- Dialect is required to let Hibernate know the Database Type, MySQL, Oracle etc 
      Hibernate 4 automatically figure out Dialect from Database Connection Metadata --> 
     <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> 

     <!-- mapping file, we can use Bean annotations too --> 
     <mapping resource="com\cluster\employee.hbm.xml" /> 
    </session-factory> 
</hibernate-configuration> 

employee.hbm.xml

<hibernate-mapping> 
    <class name="com.cluster.Employee" table="EMPLOYEE"> 
     <id name="id" type="int"> 
      <column name="ID" /> 
      <generator class="increment" /> 
     </id> 
     <property name="name" type="java.lang.String"> 
      <column name="NAME" /> 
     </property> 
     <property name="role" type="java.lang.String"> 
      <column name="ROLE" /> 
     </property> 
     <property name="insertTime" type="timestamp"> 
      <column name="insert_time" /> 
     </property> 
    </class> 
</hibernate-mapping> 

而且客戶端代碼

public class HibernateMain { 

    public static void main(String[] args) { 
     Employee emp = new Employee(); 
     emp.setName("Amr"); 
     emp.setRole("President"); 
     emp.setInsertTime(new Date()); 



    // Create the SessionFactory from hibernate.cfg.xml 
     Configuration configuration = new Configuration(); 
     configuration.configure(); 
     System.out.println("Hibernate Configuration loaded"); 

     ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); 
     System.out.println("Hibernate serviceRegistry created"); 

     SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); 

     //Get Session 
     Session session = sessionFactory.getCurrentSession(); 


     //start transaction 
     session.beginTransaction(); 
     //Save the Model object 
     session.save(emp); 
     //Commit transaction 
     session.getTransaction().commit(); 
     System.out.println("Employee ID="+emp.getId()); 

     //terminate session factory, otherwise program won't end 
     sessionFactory.close(); 
    } 

} 

罐我正在使用的是 enter image description here

我失蹤了什麼? 在此先感謝。

回答

3

我通過移除ojdbc14.jar的並添加ojdbc6.jar解決了這個問題。 因爲Hibernate 4使用的JDBC4.0實現不存在於ojdbc14.jar中,但該實現存在於ojdbc6.jar中。