Hibernate报错java.lang.ExceptionInInitializerError的处理方法

学习搭建Hibernate开发时,报错java.lang.ExceptionInInitializerError。


具体情况:项目使用的相关文件 :hibernate-distribution-3.3.2.GA      hibernate-annotations-3.4.0.GA       slf4j-1.5.8 

我使用的Hibernate文件可以从这里下载    http://pan.baidu.com/share/link?shareid=121558&uk=4077895710

  slf4j 1.5.8     http://pan.baidu.com/share/link?shareid=121561&uk=4077895710


步骤如下:

   1、新建Java Project ,

         导入 hibernate-distribution-3.3.2.GA下的 hibernate3.jar 以及 /lib/required  下所有的 jar,如下 :

                   antlr-2.7.6.jar  commons-collections-3.1.jar  dom4j-1.6.1.jar   

                  javassist-3.9.0.GA.jar     jta-1.1.jar   slf4j-api-1.5.8.jar   

   2、再倒入slf4j-1.5.8文件里面slf4j的实现包 slf4j-nop-1.5.8.jar 

   3、导入hibernate-annotations-3.4.0.GA下 hibernate-annotations.jar及lib下

                ejb3-persistence.jar和 hibernate-commons-annotations.jar

   4、导入mysql驱动 4、mysql-connector-java-5.1.7-bin.jar


 当时为了将Hibernate所有的依赖的jar放在一起,我的导入方式如下:

      windows -> Preferences ->Java  ->Build Path ->User Libraries -> New ,写入名称Hibernate3.3,

     同时勾选个下面的“System Library(added to the boot class )path”  ,这是错误的原因。


       

        将新建的这个 User Library加入到项目中。

   



最后项目中的Hibernate共有11个jar文件:


然后按照常规的写了一个POJO类,

代码  :User.java

package com.hibernate;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class User implements java.io.Serializable {
	private int id;
	private String name;
	private String passwd;
	
	@Id
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPasswd() {
		return passwd;
	}
	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}
	
}

配置文件 :hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
	<property name="connection.url">jdbc:mysql://localhost:3306/jdbc</property>
	<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
	<property name="connection.username">root</property>
	<property name="connection.password">123</property>
	<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
	<property name="show_sql">true</property>
	<property name="format_sql">true</property>
	<property name="connection.pool_size">1</property>	
	<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
	<property name="current_session_context_class">thread</property>
	
	<mapping class="com.hibernate.User" />

</session-factory>
</hibernate-configuration>

自动建表类 :CreateDB.java

import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class CreateDB {
	public static void main(String[] args) {
	
		Configuration cfg = new AnnotationConfiguration().configure();
		SchemaExport sExport = new SchemaExport(cfg);
		
		sExport.create(true, true);  
	}
}

运行报错报错:



查了半天没找到原因,有的说是没有 log4j.properties 这个文件 ,我加入后还是报错。

最后百度老久发现原来是将User Library加入到System Library的原因 ,编辑一下刚才新建的User Library,

System Library(added to the boot class )path 勾掉(不勾选)就神奇的好了,

具体是什么原理我也不知道,哪位大神要是知道,还望不惜赐教 !!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值