大家好,我刚接触hibernate。一开始没有在web环境下,一切正常。但是当在web环境下使用时,总遇到java.lang.NoClassDefFoundError: org/hibernate/cfg/AnnotationConfiguration。我在web.xml中添加了:
<listener>
        <listener-class>com.mypackage.configuration.HibernateListener</listener-class>
    </listener>
其中,com.mypackage.configuration.HibernateListener为:
package com.mypackage.configuration;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;/**
 * @author  This class garanties that only one single SessionFactory
 *         is instanciated and that the configuration is done thread safe as
 *         singleton. Actually it only wraps the Hibernate SessionFactory.
 *         You are free to use any kind of JTA or Thread transactionFactories.
 */
public class HibernateSessionFactoryUtil { /** The single instance of hibernate SessionFactory */
private static org.hibernate.SessionFactory sessionFactory; /**
 * disable contructor to guaranty a single instance
 */
private HibernateSessionFactoryUtil() {
} static{
// Annotation and XML
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
// XML only
//    sessionFactory = new Configuration().configure().buildSessionFactory();
} public static SessionFactory getInstance() {
return sessionFactory;
} /**
 * Opens a session and will not bind it to a session context
 * @return the session
 */
public Session openSession() {
return sessionFactory.openSession();
} /**
 * Returns a session from the session context. If there is no session in the context it opens a session,
 * stores it in the context and returns it.
 * This factory is intended to be used with a hibernate.cfg.xml
 * including the following property <property
 * name="current_session_context_class">thread</property> This would return
 * the current open session or if this does not exist, will create a new
 * session
 * 
 * @return the session
 */
public Session getCurrentSession() {
return sessionFactory.getCurrentSession();
} /**
 * closes the session factory
 */
public static void close(){
if (sessionFactory != null)
sessionFactory.close();
sessionFactory = null; }
}在tomcat下运行后,始终报错:
java.lang.NoClassDefFoundError: org/hibernate/cfg/AnnotationConfiguration
at com.mypacakge.configuration.HibernateSessionFactoryUtil.<clinit>(HibernateSessionFactoryUtil.java:26)
at com.mypacakge.configuration.HibernateListener.contextInitialized(HibernateListener.java:8)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.hibernate.cfg.AnnotationConfiguration
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
... 12 morehibernate所有的jar我都load了 (下载的是:http://sourceforge.net/projects/hibernate/files/hibernate4/4.1.9.Final/)。请问是怎么回事呢?