package com.fhe.db;
import java.io.File;
import org.hibernate.*;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;
import com.fhe.util.HibernateUtil;
public class ExportDB {
Session s = HibernateUtil.getSession();
Configuration cfg = null;
Transaction t = s.beginTransaction();
/*
* 根据实体类与映射文件建表
*/
@Test
public void createTable() {
// 默认读取hibernate.cfg.xml文件
cfg = new Configuration().configure(new File("src/hibernate.cfg.xml"));
// 生成并输出sql到文件(当前目录)和数据库
SchemaExport export = new SchemaExport(cfg);
try {
t.begin();// 事务开始
// 第一个为True就是把DDL语句输出到控制台,第二个为True就是根据持久类和映射文件先执行删除再执行创建操作
export.setFormat(true).setOutputFile("D:\\sql.sql")
.create(false, false);
} catch (Exception e) {
System.out.print("出错啦1");
e.printStackTrace();
}
try {
t.commit();// 提交事务
s.close();// 关闭连接
} catch (Exception e2) {
e2.printStackTrace();
}
}
/*
* 删表
*/
public void dropTable(){
// 默认读取hibernate.cfg.xml文件
cfg = new Configuration().configure(new File("src/hibernate.cfg.xml"));
// 生成并输出sql到文件(当前目录)和数据库
SchemaExport export = new SchemaExport(cfg);
try {
t.begin();// 事务开始
// 第一个为True就是把DDL语句输出到控制台,第二个为True就是根据持久类和映射文件执行删除数据库架构操作
export.drop(false, true);
} catch (Exception e3) {
e3.printStackTrace();
}
try {
t.commit();// 提交事务
s.close();// 关闭连接
} catch (Exception e4) {
e4.printStackTrace();
}
}
}
接下来写一个main方法调用这个类
public static void main(String[] args) {
// TODO Auto-generated method stub
ExportDB ed = new ExportDB();
ed.dropTable();
}
是调用成功的了。
但是我在一个jsp页面中调用之:
<jsp:useBean id="ed2" class="com.fhe.db.ExportDB"></jsp:useBean>
<%ed2.createTable(); %>
则一直报错:
org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/hibernate/Session
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/hibernate/Session
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:905)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:834)
org.apache.jsp.dropTable_jsp._jspService(dropTable_jsp.java:127)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
hibernate3.jar都是加进lib的了。关键是在应用程序就能调用而在jsp中就不行,请问哪位大侠能给点参考意见。
6 个解决方案
#1
有可能是多个版本的 jar 冲突呢
#2
hibernate 少 jar了
java.lang.NoClassDefFoundError: org/hibernate/Session
java.lang.NoClassDefFoundError: org/hibernate/Session
#3
看起来不像
#4
tomcat 的 lib 下也有这个 jar 了?
#5
不全有,我先去试试看。
#6
解决了。不用把jar加到lib。只需把Hibernate3版本改成4版本就行,可能是版本太低。ps:我jdk是1.7的
#1
有可能是多个版本的 jar 冲突呢
#2
hibernate 少 jar了
java.lang.NoClassDefFoundError: org/hibernate/Session
java.lang.NoClassDefFoundError: org/hibernate/Session
#3
看起来不像
#4
tomcat 的 lib 下也有这个 jar 了?
#5
不全有,我先去试试看。
#6
解决了。不用把jar加到lib。只需把Hibernate3版本改成4版本就行,可能是版本太低。ps:我jdk是1.7的