Hibernate 程序出现的错误

今天写了个main测试hibernate annotation的方式CRUD数据库,用的手动导入需要的hibernate的jar包

/**

*@paramargs

*/

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

Configurationcf=null;

SessionFactorysf=null;

Transactionts=null;

Sessionsession=null;

try{

//gettheConfiguration

cf=newConfiguration().configure();

sf=cf.buildSessionFactory();

session=sf.openSession();

//openTransaction

ts=session.beginTransaction();

//SaveUsers

Usersuser=newUsers();

user.setName("Share.zeng");

session.save(user);

//commitTransaction

ts.commit();

session.close();

System.out.println("savesuccessful.");

}catch(Exceptione){

//TODO:handleexception

e.printStackTrace();

}

 }

出了个异常:Exception in thread "main" java.lang.NoClassDefFoundError: javax/transaction/Synchronization

网上一查说我的Transaction 实例的jar没导对? 我用的却是是hibernate的import org.hibernate.cfg.Configuration;

后来发现说缺省了jta-1.1.jar 这jar,我测试了下确实是这样。

还查了下hibernate.jar中Transaction类和jta-*.jar Transaction类的关系,他们的对象是hibernate的 Transaction类引用了jta-*.jar Transaction

package org.hibernate;

import javax.transaction.Synchronization;

public abstract interface Transaction

{

..........

继续查了下 hibernate需要导入的基本jar(转载)

hibernate3.jar:   Hibernate的库,没有什么可说的,必须使用的jar包

cglib-2.1.3.jar:  CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心的库,必须使用的jar包

asm.jar:          和cglib-2.1.3.jar有点类似

dom4j.jar:        dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。我早在将近两年之前就开始使用dom4j,直到现在。如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这是必须使用的jar包,Hibernate用它来读写配置文件。

commons-collections.jar: Apache Commons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大。必须使用的jar包。

commons-logging.jar: 它的出现是一个历史的的遗留的遗憾,当初Apache极力游说Sun把log4j加入JDK1.4,然而JDK1.4项目小组已经接近发布JDK1.4产品的时间了,因此拒绝了Apache的要求,使用自己的java.util.logging,这个包的功能比log4j差的很远,性能也一般。后来Apache就开发出来了commons-logging.jar用来兼容两个logger。因此用commons-logging.jar写的log程序,底层的Logger是可以切换的,你可以选择log4j,java.util.logging或者它自带的Simple Logger。不过我仍然强烈建议使用log4j,因为log4j性能很高,log输出信息时间几乎等于System.out,而处理一条log平均只需要5us。你可以在Hibernate的src目录下找到Hibernate已经为你准备好了的log4j的配置文件,你只需要到Apache 网站去下载log4j就可以了。commons-logging.jar也是必须的jar包。

log4j-1.2.11.jar: 不用多说了

jta.jar: JTA规范,JTA(Java Transaction API)是一种高层的,与实现无关的,与协议无关的API,应用程序和应用服务器可以使用JTA来访问事务。当Hibernate使用JTA的时候需要,不过App Server都会带上,所以也是多余的。我这里必须使用,可能是因为Tomcat只是Web Server而非App Server的缘故。

ehcache-1.1.jar: 在Hibernate中使用它作为数据缓存的解决方案.

antlr-2.7.6rc1.jar: 在用hibernate3.0进行查询时,出现java.lang.NoClassDefFoundError:  /ANTLRException异常. 所以必须导入.

看到一个关于此内容的网友帖子

//如果不用,会抛出异常:java.lang.NoClassDefFoundError:antlr/ANTLRException

antlr-2.7.2.jar 

//如果不用此包,在启动时会抛出:nestedexceptionisjava.lang.NoClassDefFoundError:org/objectweb/asm/Type

asm.jar

//如果不用此包,在启动时抛出:nestedexceptionisjava.lang.NoClassDefFoundError:org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException

aspectjweaver.jar

//如果不用此包,在启动时抛出:nestedexceptionisjava.lang.NoClassDefFoundError:net/sf/cglib/proxy/CallbackFilter

cglib-2.1.3.jar

//如果不用此包,在启动时抛出:nestedexceptionisjava.lang.NoClassDefFoundError:org/apache/commons/collections/SequencedHashMap

commons-collections-3.1.jar

//这个就不用说啦,几乎所有框架都要使用的

commons-logging-1.0.4.jar

//如果不用此包会抛出:java.lang.NoClassDefFoundError:org/dom4j/DocumentException

dom4j-1.6.1.jar

//不用此包,在启动时招聘:java.lang.NoClassDefFoundError:javax/transaction/TransactionManager

jta.jar

//Hibernate必须使用,注意此包是包含全部的。

hibernate3.jar

相关推荐