2013-07-03 79 views
0

我已經設置並在Eclipse/Juno EE上運行Hibernate 3.6。休眠 - 對象創建錯誤

我的第一個代碼在實例化HN的類配置時給了我一個運行時錯誤。 So--準確地說,

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」標籤 的內容,從項目在同一個包我downloaded--所以它應該是罰款。

我的圖書館都添加到項目中,並在課堂上導入。

代碼在創建「非Hibernate」對象時沒有提供任何此類錯誤。

我在想什麼?

HN的新功能。這是我的第一個代碼。

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

編輯:添加代碼&堆棧跟蹤:

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. 
+0

發佈整個堆棧跟蹤 – WeMakeSoftware

+0

在控制檯上的日誌 - 我想這就是你要求的 – Roam

回答

1

您可能必須包括與應用程序的SLF4J庫:

slf4j-simple-1.6.2.jar 
+0

這三個「SLF4J:」行是完全相同的教程我跟隨(和運行代碼罰款)。他們也是我在互聯網上看到的其他一些董事會所看到的線索,以回答我的錯誤。 – Roam

+0

抱歉,您不喜歡我的評論。一切都是一個Java Q.我不認爲Q應該擁擠在那裏。 – Roam

0

您需要指定您的資源路徑hibernate.cfg.xml

IIRC這是在Configurationconfigure()方法中完成的。

編輯:原來存在Configuration#configure()沒有參數。我想這預計hibernate.cfg.xml是在根類路徑。你確定資源在你的應用程序類路徑中嗎?

EDIT2:

擡眼的Hibernate 3.6.8源。該NullPointer(如果我得到了正確的版本)是以下行

stream = Environment.class.getClassLoader().getResourceAsStream(stripped); 

貌似getClassLoader()返回null。 Class#getClassLoader()合同規定,如果類是由引導類加載程序加載的,則此方法可能會返回null

如果你的jar文件在你的jre的lib文件夾中(特別是hibernate-core jar,在這種情況下),會發生這種情況。是這樣嗎?

+0

hibernate.cfg.xml與軟件包一起位於/ src文件夾中,所以它很好(?)我正在學習一個教程,整個代碼都是從那裏開始的。我不認爲我錯過了配置中的任何東西。 – Roam

+0

查看更新的答案。 – dkateros

+0

我在Eclipse上創建了一個「HibernateLib」,並將所有Hibernate jar包括Hibernate3.jar放入該庫。然後我在項目中定義了「HibernateLib」。最後,「HibernateLib」出現在項目主文件夾下,與JRE系統庫和/ src文件夾處於同一級別。 – Roam