0

我正在使用Hibernate 4.0.1.Final。我使用Assemby插件將我所有的依賴包括在我的JAR項目中。但是,Hibernate在找到我的一個類時遇到了問題,並且它看起來拼寫正確。在我的hibernate.cfg.xml文件(位於我的JAR文件的根目錄),我有爲什麼Hibernate不能在我的JAR文件中加載一個在hibernate.cfg.xml文件中聲明的類?

<mapping class="com.myco.fdr.myproject.model.UserRole" />   

我加載的文件,像這樣

final Configuration configuration = new AnnotationConfiguration();   
configuration.configure("hibernate.cfg.xml"); 

但在執行上面的代碼時,我得到這個例外...

javax.ejb.EJBTransactionRolledbackException: Unable to load class declared as <mapping class="com.mainco.fdr.myco.model.UserRole"/> in the configuration: 
    at org.jboss.ejb3.tx.Ejb3TxPolicy.handleInCallerTx(Ejb3TxPolicy.java:87) 
    at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:130) 
    at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:195) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 
    at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 
    at org.jboss.ejb3.mdb.MessagingContainer.localInvoke(MessagingContainer.java:249) 
    at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.delivery(MessageInflowLocalProxy.java:268) 
    at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.invoke(MessageInflowLocalProxy.java:138) 
    at $Proxy84.execute(Unknown Source) 
    at org.jboss.resource.adapter.quartz.inflow.QuartzJob.execute(QuartzJob.java:57) 
    at org.quartz.core.JobRunShell.run(JobRunShell.java:203) 
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520) 
Caused by: org.hibernate.MappingException: Unable to load class declared as <mapping class="com.mainco.fdr.myco.model.UserRole"/> in the configuration: 
    at org.hibernate.cfg.AnnotationConfiguration.parseMappingElement(AnnotationConfiguration.java:545) 
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1555) 
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1534) 
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1508) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1428) 
    at org.cbco.subco.dido.service.AbstractServiceProvider.getSessionFactory(AbstractServiceProvider.java:66) 
    at org.cbco.subco.dido.service.AbstractServiceProvider.initServices(AbstractServiceProvider.java:118) 
    at org.cbco.subco.dido.quartz.ProcessOrdersJob.execute(ProcessOrdersJob.java:44) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112) 
    at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166) 
    at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 
    at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 
    at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 
    at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:126) 
    ... 11 more 
Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: com.mainco.fdr.myco.model.UserRole 
    at org.jboss.mx.loading.LoadMgr3.beginLoadTask(LoadMgr3.java:212) 
    at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:521) 
    at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:415) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:169) 
    at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:100) 
    at org.hibernate.cfg.AnnotationConfiguration.parseMappingElement(AnnotationConfiguration.java:542) 
    ... 31 more 

有問題的類出現在我的JAR文件的根目錄下(也許它應該出現在「classes」目錄下)。總之,這裏是我如何使用匯編器插件...

 <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.2.1</version> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> 
        <phase>package</phase> <!-- bind to the packaging phase --> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

如何解決此ClassNotFoundException的?

+0

它是一個錯字或你拼錯在'休眠-cfg.xml'類名? – Raghuram 2012-08-06 17:03:46

回答

0

您有persistence.xml
添加到您的persistence.xml財產

<property name="hibernate.ejb.cfgfile" value="META-INF/hibernate.cfg.xml"/> 
+0

謝謝,那就是問題所在。 – Dave 2012-08-06 19:01:41

+0

@Ilya什麼是你的persistence.xml的確切內容? – 2013-12-14 22:58:12

+0

@MrPhi http://docs.jboss.org/jbossas/docs/Server_Configuration_Guide/4/html/ch01s02s01.html – Ilya 2013-12-15 08:46:33

相關問題