Hibernate出错NoClassDefFoundError

ming1683 2006-07-12 10:27:07
HibernateUtil照搬网上的,映射文件和类文件是用hibernate-extensions-2.1.3生成的,按书上的一步步作,最后总是 NoClassDefFoundError,位置在Session session = HibernateUtil.currentSession();
不知何原因

注意是NoClassDefFoundError,而不是NoClassDefFoundError: net/sf/hibernate/HibernateException。
(我手工把hibernate必须库加到lib里面了,否则就是NoClassDefFoundError: net/sf/hibernate/HibernateException,这个是毫无疑问的classpath问题)
第一次和之后运行时错误有一点不同,第一次是ExceptionInInitializerError,之后就是NoClassDefFoundError

第一次运行时错误:

javax.servlet.ServletException
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
org.apache.jsp.hibernateTest_jsp._jspService(org.apache.jsp.hibernateTest_jsp:83)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

java.lang.ExceptionInInitializerError
org.zzd.listBean.getList(listBean.java:31)
org.apache.jsp.hibernateTest_jsp._jspService(org.apache.jsp.hibernateTest_jsp:60)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


之后运行时错误:

javax.servlet.ServletException
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
org.apache.jsp.hibernateTest_jsp._jspService(org.apache.jsp.hibernateTest_jsp:83)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

java.lang.NoClassDefFoundError
org.zzd.listBean.getList(listBean.java:31)
org.apache.jsp.hibernateTest_jsp._jspService(org.apache.jsp.hibernateTest_jsp:60)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


==================================


HibernateUtil.java:

package org.zzd.db;

import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;

public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (HibernateException ex) {
throw new ExceptionInInitializerError(ex);
}
}

public static final ThreadLocal session = new ThreadLocal();

public static Session currentSession() throws HibernateException {
Session s = (Session) session.get();
// Open a new Session, if this Thread has none yet
if (s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}

public static void closeSession() throws HibernateException {
Session s = (Session) session.get();
if (s != null)
s.close();
session.set(null);
}
}


===================================


listBean.java:

package org.zzd;

import java.util.*;
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;

import org.zzd.db.*;

public class listBean {
private String s_query = null;

public void setS_query(String string) {
s_query = string;
}
/** Creates a new instance of listBean */
public List getList() throws HibernateException {
List list = null;
Session sess = HibernateUtil.currentSession();
try {
Transaction tx = sess.beginTransaction();
Query query = sess.createQuery(s_query);
list = query.list();
tx.commit();
}
finally {
HibernateUtil.closeSession();
}
return list;
}
}


==================================
...全文
820 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
timtin0361 2006-10-01
  • 打赏
  • 举报
回复
恭喜解决!
ming1683 2006-09-30
  • 打赏
  • 举报
回复
用了MyEclipse终于能行了
火神凯 2006-07-17
  • 打赏
  • 举报
回复
haha,我也遇到过哦,自己看看就解决了,可是我那个查了两天的错误还没解决
http://community.csdn.net/Expert/topic/4886/4886204.xml?temp=.6343195
ming1683 2006-07-17
  • 打赏
  • 举报
回复
julyboxer()遇到的问题就是我首帖说的必须手工把hibernate必须库加到lib里面,否则就是NoClassDefFoundError: net/sf/hibernate/HibernateException,这个是毫无疑问的classpath问题
vlinux 2006-07-16
  • 打赏
  • 举报
回复
除了 wangshenhai() 的解决方案之外,我还真的想不出来了。
关注ING
julyboxer 2006-07-16
  • 打赏
  • 举报
回复
问题解决了。。在建立hibernate mapping的时候。记得把cpoy checked library jars to project folder and add to build-path打钩就得了。。嘿嘿。。解决了问题正常真高兴。。!!
mythche 2006-07-15
  • 打赏
  • 举报
回复
我也出现了这种情况!!希望哪位达人能够帮忙一下!!小弟感激不尽
julyboxer 2006-07-15
  • 打赏
  • 举报
回复
我也出现了这种情况!!希望哪位达人能够帮忙一下!!小弟感激不尽。。 
平台是myeclipse 4.0.0GA
ming1683 2006-07-14
  • 打赏
  • 举报
回复
我又确定了一下,hibernate.cfg.xml是放在/WEB-INF/classes下的,连同各数据库映射文件
ming1683 2006-07-14
  • 打赏
  • 举报
回复
我早已搜索到这个方案,把所有的必须库都放到/WEB-INF/lib目录下了,但是依旧
wangshenhai 2006-07-14
  • 打赏
  • 举报
回复
你把hibernate2.jar,asm.jar,cglib-2.1.jar和antlr.jar,ehcache-1.1.jar放在/WEB-INF/lib目录下,再试试。
顽皮小熊 2006-07-13
  • 打赏
  • 举报
回复
配置没找到
wangshenhai 2006-07-13
  • 打赏
  • 举报
回复
你确定你的hibernate.cfg.xml放在/WEB-INF/classes下吗?
如果你使用SessionFactory sessions = new Configuration().configure().buildSessionFactory();的话,hibernate默认你的文件放在该目录下了,否则你需要指定该文件的具体位置,当然这个位置是以/WEB-INF/classes为基准的。如果你放在/WEB-INF/classes/hibernate/hibernate.cfg.xml。
则上面语句应写为:
SessionFactory sessions = new Configuration().configure("/hibernate/hibernate.cfg.xml").buildSessionFactory();
kingdoom 2006-07-12
  • 打赏
  • 举报
回复
多半是配置问题
ming1683 2006-07-12
  • 打赏
  • 举报
回复
jsp文件:

<%@page contentType="text/html;charset=GBK" %>
<%@page import="net.sf.hibernate.*,net.sf.hibernate.cfg.*,java.util.*,org.zzd.db.*"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>Hibernate</title>
</head>
<body>

<h1>Hibernate</h1>
<a href="index.jsp">首页</a>

<%
String query = "from Gjb as gjb";
%>
<jsp:useBean id="listbean" class="org.zzd.listBean" scope="request"/>
<jsp:setProperty name="listbean" property="s_query" value="<%= query %>" />
<%
List list = listbean.getList();
out.print(list);

%>

</body>
</html>


==================================


Gjb.java:

package org.zzd.db;

import java.io.Serializable;
//import org.apache.commons.lang.builder.ToStringBuilder;


/** @author Hibernate CodeGenerator */
public class Gjb implements Serializable {

/** identifier field */
private Long id;

/** persistent field */
private String jc;

/** nullable persistent field */
private String qc;

/** persistent field */
private int lb;

/** full constructor */
public Gjb(String jc, String qc, int lb) {
this.jc = jc;
this.qc = qc;
this.lb = lb;
}

/** default constructor */
public Gjb() {
}

/** minimal constructor */
public Gjb(String jc, int lb) {
this.jc = jc;
this.lb = lb;
}

public Long getId() {
return this.id;
}

public void setId(Long id) {
this.id = id;
}

public String getJc() {
return this.jc;
}

public void setJc(String jc) {
this.jc = jc;
}

public String getQc() {
return this.qc;
}

public void setQc(String qc) {
this.qc = qc;
}

public int getLb() {
return this.lb;
}

public void setLb(int lb) {
this.lb = lb;
}

public String toString() {
return this.toString();
// return new ToStringBuilder(this)
// .append("id", getId())
// .toString();
}

}


====================================


Gjb.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="org.zzd.db.Gjb" table="gjb">
<id column="xh" name="id" type="long">
<generator class="sequence"/>
</id>
<property column="jc" length="50" name="jc" not-null="true" type="string"/>
<property column="qc" length="150" name="qc" type="string"/>
<property column="lb" length="11" name="lb" not-null="true" type="integer"/>
</class>
</hibernate-mapping>


===================================


hibernate.cfg.xml:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.datasource">java:comp/env/jdbc/mysql</property>
<property name="show_sql">false</property>
<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>

<mapping resource="org/zzd/db/Gjb.hbm.xml"/>
<mapping resource="org/zzd/db/Gjlbb.hbm.xml"/>
<mapping resource="org/zzd/db/Jzb.hbm.xml"/>
<mapping resource="org/zzd/db/Xiaoxib.hbm.xml"/>
<mapping resource="org/zzd/db/Xxlbb.hbm.xml"/>
</session-factory>
</hibernate-configuration>
=====================================
请大家指教!

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧