Oracle11g+;hibernate 4.2 buildSessionFactory引发空指针异常

Oracle11g+;hibernate 4.2 buildSessionFactory引发空指针异常,oracle,hibernate,nullpointerexception,hibernate.cfg.xml,Oracle,Hibernate,Nullpointerexception,Hibernate.cfg.xml,我正在尝试将Hibernate 4.2与Oracle 11g结合使用。 以下是我的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/hibern

我正在尝试将Hibernate 4.2与Oracle 11g结合使用。 以下是我的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 name="sessionFactory">
<property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
<property name="hibernate.connection.password">abcde@1234</property>
<property     name="hibernate.connection.url">    
jdbc:oracle:thin:ourhost:1521:oursid</property>
<property name="hibernate.connection.username">OURUSER</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>

<mapping resource="resources/mapping/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
如果我使用mysql数据库和相关的hibernate.cfg.xml,这就可以了。如果我像上面提到的那样对Oracle使用同样的东西,那么它根本就没有连接。我得到以下例外情况:

    Initial SessionFactory creation failed.
    java.lang.NullPointerException
at      org.hibernate.engine.jdbc.internal.
    JdbcServicesImpl.configure(JdbcServicesImpl.java:207)
at org.hibernate.service.internal.
     StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75)
at org.hibernate.service.internal.
    AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159)
at org.hibernate.service.internal.
    AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:78)
at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2283)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2279)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1748)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1788)
at  
com.bosch.asaw.utilities.HibernateUtil.createSessionFactory(HibernateUtil.java:25)
at com.bosch.asaw.utilities.HibernateUtil.<init>(HibernateUtil.java:17)
at com.bosch.asaw.dao.testhibernate.main(testhibernate.java:19)
   Exception in thread "main" java.lang.ExceptionInInitializerError
at 
 com.bosch.asaw.utilities.HibernateUtil.createSessionFactory(HibernateUtil.java:30)
at com.bosch.asaw.utilities.HibernateUtil.<init>(HibernateUtil.java:17)
at com.bosch.asaw.dao.testhibernate.main(testhibernate.java:19)
    Caused by: java.lang.NullPointerException
at 
org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:207
at org.hibernate.service.internal.
StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75)
at  org.hibernate.service.internal.
AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159)
at     

org.hibernate.service.internal.AbstractServiceRegistryImpl.
getService(AbstractServiceRegistryImpl.java:131)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:78)
at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2283)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2279)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1748)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1788)
at 
com.bosch.asaw.utilities.HibernateUtil.createSessionFactory(HibernateUtil.java:25)
... 2 more
初始会话工厂创建失败。
java.lang.NullPointerException
位于org.hibernate.engine.jdbc.internal。
jdbcservicesiml.configure(jdbcservicesiml.java:207)
在org.hibernate.service.internal。
StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75)
在org.hibernate.service.internal。
AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159)
在org.hibernate.service.internal。
AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131)
在org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:78)上
位于org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2283)
位于org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2279)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1748)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1788)
在
com.bosch.asaw.utilities.HibernateUtil.createSessionFactory(HibernateUtil.java:25)
位于com.bosch.asaw.utilities.HibernateUtil.(HibernateUtil.java:17)
位于com.bosch.asaw.dao.testhibernate.main(testhibernate.java:19)
线程“main”java.lang.ExceptionInInitializeError中出现异常
在
com.bosch.asaw.utilities.HibernateUtil.createSessionFactory(HibernateUtil.java:30)
位于com.bosch.asaw.utilities.HibernateUtil.(HibernateUtil.java:17)
位于com.bosch.asaw.dao.testhibernate.main(testhibernate.java:19)
原因:java.lang.NullPointerException
在
org.hibernate.engine.jdbc.internal.jdbcservicesiml.configure(jdbcservicesiml.java:207
在org.hibernate.service.internal。
StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75)
在org.hibernate.service.internal。
AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159)
在
org.hibernate.service.internal.AbstractServiceRegistryImpl。
getService(AbstractServiceRegistryImpl.java:131)
在org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:78)上
位于org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2283)
位于org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2279)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1748)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1788)
在
com.bosch.asaw.utilities.HibernateUtil.createSessionFactory(HibernateUtil.java:25)
…还有两个

有人能告诉我我做错了什么吗?我在Oracle server上仔细检查了端口、sid和主机名。请帮助。

您尝试过生成会话工厂的新代码吗

SessionFactory factory = null;
try {
     Configuration configuration = new Configuration();
     configuration.configure("resources/hibernate.cfg.xml");

    ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder();
    serviceRegistryBuilder.applySettings(configuration.getProperties());
    serviceRegistry = serviceRegistryBuilder.buildServiceRegistry();

    factory = configuration.buildSessionFactory(serviceRegistry);  
} catch (Throwable ex) {

    System.err.println("Initial SessionFactory creation failed.");
    ex.printStackTrace();
    throw new ExceptionInInitializerError(ex);

}

我认为问题出在配置文件中

请参阅以下oracle配置文件

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="connection.username">ranga</property> <property name="connection.password">ranga</property> <property name="connection.url">jdbc:oracle:thin:@localhost:1521:XE</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">create</property> <mapping resource="com/ranga/mapping/Persom.hbm.xml"/> </session-factory> </hibernate-configuration> 如果您想要完整的示例程序,请从github()下载。

请参阅 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="connection.username">ranga</property> <property name="connection.password">ranga</property> <property name="connection.url">jdbc:oracle:thin:@localhost:1521:XE</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">create</property> <mapping resource="com/ranga/mapping/Persom.hbm.xml"/> </session-factory> </hibernate-configuration>
 package com.ranga.util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateUtil {
     private static final SessionFactory sessionFactory;
     private static final ServiceRegistry serviceRegistry;
     static {
        try {
           // Create the SessionFactory from hibernate.cfg.xml
           Configuration configuration = new Configuration();
           configuration.configure();
           serviceRegistry = new ServiceRegistryBuilder().applySettings(
           configuration.getProperties()).buildServiceRegistry();
           sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        } catch (Throwable ex) {
           // Make sure you log the exception, as it might be swallowed
           System.err.println("Initial SessionFactory creation failed." + ex);
           throw new ExceptionInInitializerError(ex);
        }
}

public static SessionFactory getSessionFactory() {
     return sessionFactory;
}

public static void closeSessionFactory() {
        if (sessionFactory != null)
            sessionFactory.close();
    }
}