Hibernate - 对象创建错误

时间:2013-07-03 19:33:10

标签: hibernate

我已经设置并在Eclipse / Juno EE上运行Hibernate 3.6。

我的第一个代码在实例化HN的类配置时给出了运行时错误。所以 - 确切地说,

SessionFactory aFactory;
Configuration conf; 

很好&跑步,

但下面的行

conf=new Configuration();

正在抛出 java.lang.ExceptionInInitializerError

代码

SessionFactory aFactory = new Configuration().configure().buildSessionFactory(); 

远未跑步。

我的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="connection.driver_class">org.postgresql.Driver</property>       
    <property name="connection.url">jdbc:postgresql://localhost:5432/ThisDB</property>  
    <property name="connection.username">postgres</property>
    <property name="connection.password">somePass</property>
    <property name="connection.pool_size">1</property>
    <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>  
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    <property name="show_sql">true</property>
    <property name="hbm2ddl.auto">create</property>
    <mapping class="dataObjs.someItems"/>  
</session-factory>
</hibernate-configuration>

我复制了“!DOCTYPE”标签的内容 来自我下载的同一个包中的项目 - 所以它应该没问题。

我的库都已添加到项目中并在类中导入。

代码在创建“非Hibernate”对象时没有给出任何此类错误。

我缺少什么?

HN新手。这是我的第一个代码。

// =====================================

编辑:添加代码&amp; stacktrace:

package somePaket;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import dataObjs.someItems;

public class firstClass{
public static void main(String[] args) {
    System.out.println("..........see this.........");

    someItems kullanici = new someItems();
    itm.setID(1);
    itm.setType("aaa");

    SessionFactory aFactory;
    Configuration conf=new Configuration();;

    new Configuration();
    new Configuration().configure().buildSessionFactory();
}
}

完整登录控制台:

..........see this.........
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.ExceptionInInitializerError
    at org.hibernate.cfg.Configuration.reset(Configuration.java:332)
    at org.hibernate.cfg.Configuration.<init>(Configuration.java:298)
    at org.hibernate.cfg.Configuration.<init>(Configuration.java:302)
    at somePaket.firstClass.main(firstClass.java:18)
Caused by: java.lang.NullPointerException
    at org.hibernate.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:167)
    at org.hibernate.cfg.Environment.<clinit>(Environment.java:618)
    ... 4 more

// =====================

EDIT2:

在调试器中跟踪它:

LoggerFactory.singleImplementationSanityCheck()

在第216行抛出以下内容:

FileNotFoundException(Throwable).<init>(String) line: 264. 

2 个答案:

答案 0 :(得分:1)

您可能必须在应用程序中包含slf4j库:

slf4j-simple-1.6.2.jar

答案 1 :(得分:0)

您需要指定hibernate.cfg.xml

的资源路径

IIRC这是通过configure()的{​​{1}}方法完成的。

编辑:结果是存在Configuration没有参数。我想这期望Configuration#configure()在根类路径中。您确定资源在您的应用程序类路径中吗?

Edit2:

查看Hibernate 3.6.8源代码。 hibernate.cfg.xml(如果我的版本正确)位于以下行

NullPointer

看起来stream = Environment.class.getClassLoader().getResourceAsStream( stripped ); 返回null。 getClassLoader()契约声明如果类由引导类加载器加载,则此方法可能会返回Class#getClassLoader()

如果您的jar位于jre的lib文件夹中(特别是hibernate-core jar,在本例中),则会发生这种情况。是这样的吗?