读书人

Hibernate 程序出现的异常

发布时间: 2012-06-26 10:04:13 作者: rapoo

Hibernate 程序出现的错误

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

/**
? * @param args
? */
?public static void main(String[] args) {
??// TODO Auto-generated method stub
??Configuration cf = null;
??SessionFactory sf = null;
??Transaction ts = null;
??Session session = null;
??try {
???//get the Configuration
???cf = new Configuration().configure();
???sf = cf.buildSessionFactory();
???session = sf.openSession();
???//open Transaction
???ts = session.beginTransaction();
???//Save Users
???Users user = new Users();
???user.setName("Share.zeng");
???session.save(user);
???//commit Transaction
???ts.commit();
???session.close();
???System.out.println("save successful.");
??} catch (Exception e) {
???// TODO: handle exception
???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 ??
?
//如果不用此包,在启动时会抛出: nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/Type???
asm.jar??
?
//如果不用此包,在启动时抛出:nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException???
aspectjweaver.jar??
?
//如果不用此包,在启动时抛出:nested exception is java.lang.NoClassDefFoundError: net/sf/cglib/proxy/CallbackFilter???
cglib-2.1.3.jar??
?
//如果不用此包,在启动时抛出:nested exception is java.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

读书人网 >软件架构设计

热点推荐