【问题标题】:Hibernate -- object creation errorHibernate -- 对象创建错误
【发布时间】:2013-07-03 19:33:09
【问题描述】:

我已经在 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”标签的内容 来自我下载的同一个包中的一个项目——所以应该没问题。

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

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

我错过了什么?

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. 

【问题讨论】:

  • 发布整个堆栈跟踪
  • 控制台上的日志——我想这就是你想要的

标签: hibernate


【解决方案1】:

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

slf4j-simple-1.6.2.jar

【讨论】:

  • 这三个“SLF4J:”行在我正在遵循的教程中完全相同(并且运行代码正常)。它们也是我在其他一些板上看到的线条,我在互联网上四处寻找我的错误的答案。
  • 很抱歉您不喜欢我的评论。一切都是java Q。我不认为Q应该拥挤。
【解决方案2】:

你需要指定你的hibernate.cfg.xml的资源路径

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

编辑:原来存在 Configuration#configure() 没有参数。我猜这期望hibernate.cfg.xml 在根类路径中。您确定资源在您的应用程序类路径中吗?

编辑2:

查找了 Hibernate 3.6.8 源代码。 NullPointer(如果我的版本正确的话)在下面一行

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

看起来getClassLoader() 返回空值。 Class#getClassLoader() 契约规定,如果类是由引导类加载器加载的,则此方法可能会返回 null

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

【讨论】:

  • hibernate.cfg.xml 与包一起位于 /src 文件夹中,所以没关系(?)我正在关注一个教程,整个代码都来自那里。我也不认为我错过了配置中的任何内容。
  • 我在 Eclipse 上创建了一个“HibernateLib”,并将包括 Hibernate3.jar 在内的所有 Hibernate jar 放入该库中。然后我在项目中定义了“HibernateLib”。最后,“HibernateLib”出现在项目主文件夹的正下方,与 JRE 系统库和 /src 文件夹处于同一级别。
  • 我这里的版本是 3.6.4,以防万一
  • 该行在3.6.4中是一样的。无论您使用什么方法在 Eclipse 中包含该库,实际的休眠 jar 是否可能位于您用于在实际文件系统中运行程序的 JRE 的 lib 文件夹中?
  • 我已经有一段时间没有踏入 jre 文件夹了。 jre 和 hibernate 库是 eclipse 上的两个独立库,并且在项目中无需修改即可定义它们。我使用了“构建路径”菜单并按照这些步骤进行操作。此外,所有这些都是他们在我的那个教程中完成的方式——这让我很兴奋。
猜你喜欢
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 2011-07-22
  • 1970-01-01
  • 2018-02-11
  • 2012-11-08
相关资源
最近更新 更多