Hibernate上的NullPointerException new Configuration();

时间:2014-12-29 16:52:20

标签: java eclipse hibernate nullpointerexception hibernate-mapping

这是我第一次尝试使用Eclipse进行Hibernate,以下是我所做的事情:

  1. 创建了一个名为Student.java的Java Bean,如下所示:

    package com.jwt.hibernate;
    
    public class Student {
    
    private long id;
    private String name;
    private String degree;
    private String roll;
    private String phone;
    
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDegree() {
        return degree;
    }
    public void setDegree(String degree) {
        this.degree = degree;
    }
    public String getRoll() {
        return roll;
    }
    public void setRoll(String roll) {
        this.roll = roll;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }   
    
    }
    
  2. 创建了一个映射文件 Student.hbm.xml ,如下所示:

  3.     

    <hibernate-mapping>
    
    <class name="com.jwt.hibernate.Student" table="student">
    
    <id column="ID" name="id" type="long" />
    <property column="name" name="name" type="string" />
    <property column="degree" name="degree" type="string" />
    <property column="roll" name="roll" type="string" />
    <property column="phone" name="phone" type="string" />
    
    </class>
    
    </hibernate-mapping>
    

    3。创建了hibernate配置文件 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>
    
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernatetutorial</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">root</property>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <property name="hbm2ddl.auto">create </property>
    
    <mapping resource="com/jwt/hibernate/Student.hbm.xml" />
    
    </session-factory>
    </hibernate-configuration>
    
    1. 创建了类 SimpleTest.java ,如下所示:

      package com.jwt.hibernate;
      
       import org.hibernate.Session;
       import org.hibernate.SessionFactory;
       import org.hibernate.Transaction;
       import org.hibernate.cfg.Configuration;
      
       public class SimpleTest {
      
      public static void main(String[] args) {
          Configuration cfg = new Configuration();
          cfg.configure("hibernate.cfg.xml");
      
          SessionFactory factory = cfg.buildSessionFactory();
          Session session = factory.openSession();
      
          Student student = new Student();
          student.setName("Mukesh");
          student.setRoll("101");
          student.setPhone("8888");
          student.setDegree("B.E");
      
          Transaction tx = session.beginTransaction();
          session.save(student);
          System.out.println("Object saved successfully.....!!");
          tx.commit();
      
          session.close();
          factory.close();
      }
      
      }
      
    2. 现在,当我尝试运行SimpleTest时,出现以下错误:

      **INFO: HHH000412: Hibernate Core {4.3.7.Final}
      Exception in thread "main" java.lang.ExceptionInInitializerError
          at org.hibernate.cfg.Configuration.reset(Configuration.java:326)
          at org.hibernate.cfg.Configuration.<init>(Configuration.java:291)
          at org.hibernate.cfg.Configuration.<init>(Configuration.java:295)
          at com.jwt.hibernate.SimpleTest.main(SimpleTest.java:11)
      Caused by: java.lang.NullPointerException
          at org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:170)
          at org.hibernate.cfg.Environment.<clinit>(Environment.java:221)
          ... 4 more**
      

      我仔细检查并确保所有配置和jar文件都已添加到类路径中。所以这不是问题。我真的很感激可能导致这个问题的一些见解,以及如何解决它。

      提前致谢!

2 个答案:

答案 0 :(得分:1)

我建议更新到更高版本的SLF4J 或
您的Hibernate.cfg.xml不在类路径上。它在什么文件夹中?

编辑:

Caused by: java.lang.NullPointerException
at org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:170)

这是您代码中的实际异常,如果您的Hibernate.cfg.xml已加载,请检查SELF4J版本,不要使用user library来获取您的jar文件,将所有库放入您的lib文件夹,然后在类路径中配置它们。

答案 1 :(得分:0)

您可能会发现Hibernate的Java配置更加友好。这是我做过的一个例子(注意:在这个类中有像@Autowired和@PostConstruct这样的Spring注释,所以不要混淆):

public class HibernateConfigBean {

    private static final Logger logger = Logger.getLogger(HibernateConfigBean.class);

    @Autowired private Environment environment;

    private SessionFactory sessionFactory;
    private Configuration configuration;

    @PostConstruct
    private void init(){
        configuration = new Configuration();

        configuration.setProperty("hibernate.dialect", environment.getProperty("hibernate.dialect"));
        configuration.setProperty("hibernate.connection.driver_class", environment.getProperty("hibernate.connection.driver_class"));
        configuration.setProperty("hibernate.connection.url", environment.getProperty("hibernate.connection.url"));
        configuration.setProperty("hibernate.connection.username", environment.getProperty("db_username"));
        configuration.setProperty("hibernate.connection.password", environment.getProperty("db_password"));

        //Add additional Annotated Classes here
        configuration.addAnnotatedClass(UserEntity.class);

        StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
        sessionFactory = configuration.buildSessionFactory(builder.build());
    }

    public SessionFactory getSessionFactory(){
        return sessionFactory;
    }

    //This should be visible outside of the package as it's only used by the GenerateDbSchema class
    void generateSchema() throws Exception {
        try{
            new SchemaExport(configuration).create(false, true);
        } catch (RuntimeException re){
            throw new Exception(re);
        }
    }
}

然后我将我的值放入属性文件中: - )