簡體   English   中英

休眠會話未創建

[英]Hibernate session not getting created

我正在嘗試運行帶有Hibernate批注的應用程序。 我收到以下異常

Initial SessionFactory creation failed.java.lang.NoClassDefFoundError: net.sf.cglib.core.DebuggingClassWriter$1
Exception in thread "main" java.lang.ExceptionInInitializerError
   at tapes.test.validation.SessionUtil.<clinit>(SessionUtil.java:17)
   at java.lang.Class.initializeClass(libgcj.so.90)
   at tapes.test.validation.LuceneSearch.dbFullIndex(LuceneSearch.java:34)
   at tapes.test.validation.LuceneSearch.main(LuceneSearch.java:143)
Caused by: java.lang.NoClassDefFoundError: net.sf.cglib.core.DebuggingClassWriter$1
   at java.lang.Class.initializeClass(libgcj.so.90)
   at net.sf.cglib.core.DebuggingClassWriter.toByteArray(DebuggingClassWriter.java:73)
   at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:26)
   at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
   at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)
   at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:117)
   at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
   at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
   at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
   at java.lang.Class.initializeClass(libgcj.so.90)
   at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.java:117)
   at org.hibernate.proxy.pojo.cglib.CGLIBProxyFactory.postInstantiate(CGLIBProxyFactory.java:43)
   at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:162)
   at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:135)
   at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:55)
   at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:56)
   at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:302)
   at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:434)
   at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:109)
   at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)
   at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:226)
   at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1300)
   at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
   at tapes.test.validation.SessionUtil.<clinit>(SessionUtil.java:14)
   ...3 more
Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.util.TraceClassVisitor not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:/usr/local/tomcat/webapps/SearchDoctors/Webcontent/WEB-INF/classes/,file:/usr/local/tomcat/webapps/SearchDoctors/WEB-INF/lib/ant-1.6.5.jar,file:/usr/local/tomcat/webapps/SearchDoctors/WEB-INF/lib/ant-antlr-1.6.5.jar,file:/usr/local/tomcat/webapps/SearchDoctors/WEB-INF/lib/ant-junit-1.6.5.jar,file:/usr/local/tomcat/webapps/SearchDoctors/WEB-INF/lib/ant-launcher-.....

這是代碼。

public static void  dbFullIndex() throws CorruptIndexException, LockObtainFailedException, IOException{
        try{
            directory = FSDirectory.getDirectory("/home/athreya/luceneindex/docsIndexFile");
            //Index of the User Table--> /home/araghu/aditya/indexFile
            Session session = SessionUtil.getSessionFactory().getCurrentSession();
            if(IndexReader.indexExists(directory)){
                writer = new IndexWriter(directory, new StandardAnalyzer(),true);
                System.out.println("Index exists");
            }
            else{
                writer = new IndexWriter(directory, new StandardAnalyzer(),true);
                System.out.println("Index doesn't Exist");
            }
            session.beginTransaction();
            org.hibernate.Query query = session.createQuery("from Doctors");
            java.util.List docList = query.list();
            session.getTransaction().commit();
            for( int iter=0;iter< docList.size();iter++){
                Doctors docs=(Doctors) docList.get(iter);
                String pkid=docs.getId()+"";
                String indexString= docs.getFirstName()+" "+docs.getMiddleName()+" "+docs.getLastName()+
                " "+docs.getAddress()+" "+docs.getCity()+" "+docs.getHospitalNames()+" "+docs.getSpecialization()+" "
                +docs.getQualification()+" "+docs.getNatProId();
                //String specialString =docs.getSpecialization()+" "+docs.getHospitalNames();
                writer.addDocument(createDoc(indexString,pkid));
                System.out.println("Name ="+ docs.getFirstName());
                //  writer.addDocument(createSpDoc(specialString));
            }
            writer.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }       

誰能解釋這個問題。 我在lib中有cglib jar。 我的java_home設置如下--export JAVA_HOME = / usr / jdk1.6.0_18 /

請幫助我為此困擾了很長時間。

謝謝,Aditya

如果您的WEB-INF / lib中包含該JAR,則可能是錯誤的版本。 我將打開JAR並確保所涉及的類確實也包含在其中。

您似乎並不依賴CLASSPATH環境變量。 很好,因為Tomcat完全忽略了它。 您的JAR必須位於Web上下文的WEB-INF / lib或服務器的/ lib中,以便Tomcat類加載器找到它們。

 Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.util.TraceClassVisitor 

您需要在運行時類路徑中具有ASM 運行Web應用程序時,它必須位於/WEB-INF/lib 它通常已經包含在您從Hibernate獲得的下載包中。 將其復制到運行時類路徑。

非常感謝大家! 問題是Eclipse中的默認版本與JAVA_HOME路徑不同。 我想這就是問題所在。 現在很好。 如果還有其他問題,我知道你們在哪里為我服務。 非常感謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM