2013-09-30 48 views
0

我有以下代碼:無法實例化bean類[org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]

package com.transcend.txn; 

    public class JpaTxnMain { 

     public static void main(String[] args) { 
      JpaAccountDao.addAccount(); 
     } 
    } 

    package com.transcend.txn; 

    import java.util.List; 

    import javax.persistence.EntityManager; 
    import javax.persistence.PersistenceContext; 

    import org.springframework.context.support.ClassPathXmlApplicationContext; 
    import org.springframework.stereotype.Repository; 
    import org.springframework.transaction.annotation.Transactional; 

    @Repository("spitterDao") 
    @Transactional 
    public class JpaAccountDao { 

     static{ 
      initContext(); 
     } 

     @PersistenceContext 
     private static EntityManager em; 

     public static void addAccount() { 
      Account account = new Account(); 
      account.setId("100"); 
      em.persist(account); 
     } 

     public static void initContext() { 
      new ClassPathXmlApplicationContext("main-annotation.xml"); 
     } 

    } 


    <?xml version="1.0" encoding="UTF-8"?> 

    <beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:util="http://www.springframework.org/schema/util" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:jee="http://www.springframework.org/schema/jee" 
    xmlns:lang="http://www.springframework.org/schema/lang" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd 
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
      http://www.springframework.org/schema/aop 
      http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
      http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd 
      http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd 
      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> 

     <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/> 

     <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 

     <bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
      <property name="packagesToScan" value="com.transcend.txn" /> 
      <property name="dataSource" ref="mySqlDataSource"/> 
      <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/> 
     </bean> 

     <bean id="mySqlDataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
      <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> 
      <property name="url" value="jdbc:oracle:thin:@localhost:1521:qadb7"/> 
      <property name="username" value="tp2"/> 
      <property name="password" value="tp2"/> 
      <property name="defaultAutoCommit" value="true"/> 
     </bean> 

     <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="showSql" value="true"/> 
      <property name="generateDdl" value="false"/> 
      <property name="databasePlatform" value="org.hibernate.dialect.OracleDialect"/> 
     </bean> 

    </beans> 

當我嘗試執行上面的代碼中,我得到以下錯誤:

 log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment). 
    log4j:WARN Please initialize the log4j system properly. 
    log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 
    Exception in thread "main" java.lang.ExceptionInInitializerError 
     at com.transcend.txn.JpaTxnMain.main(JpaTxnMain.java:6) 
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0' defined in class path resource [main-annotation.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'emf' defined in class path resource [main-annotation.xml]: Cannot resolve reference to bean 'jpaVendorAdapter' while setting bean property 'jpaVendorAdapter'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaVendorAdapter' defined in class path resource [main-annotation.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:529) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) 
     at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:741) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
     at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
     at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
     at com.transcend.txn.JpaAccountDao.initContext(JpaAccountDao.java:30) 
     at com.transcend.txn.JpaAccountDao.<clinit>(JpaAccountDao.java:17) 
     ... 1 more 
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'emf' defined in class path resource [main-annotation.xml]: Cannot resolve reference to bean 'jpaVendorAdapter' while setting bean property 'jpaVendorAdapter'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaVendorAdapter' defined in class path resource [main-annotation.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence 
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:329) 
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1387) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1128) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:438) 
     at org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:277) 
     at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.detectPersistenceExceptionTranslators(PersistenceExceptionTranslationInterceptor.java:139) 
     at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.<init>(PersistenceExceptionTranslationInterceptor.java:79) 
     at org.springframework.dao.annotation.PersistenceExceptionTranslationAdvisor.<init>(PersistenceExceptionTranslationAdvisor.java:71) 
     at org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor.setBeanFactory(PersistenceExceptionTranslationPostProcessor.java:85) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1502) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1470) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521) 
     ... 12 more 
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaVendorAdapter' defined in class path resource [main-annotation.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1007) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:953) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) 
     ... 30 more 
    Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence 
     at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163) 
     at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1000) 
     ... 38 more 
    Caused by: java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence 
     at org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter.<init>(HibernateJpaVendorAdapter.java:57) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148) 
     ... 40 more 
    Caused by: java.lang.ClassNotFoundException: org.hibernate.ejb.HibernatePersistence 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
     ... 46 more 

我有以下罐:

aopalliance-1.0.jar 
    commons-dbcp-1.4.jar 
    commons-logging-1.1.1.jar 
    commons-pool-1.5.4.jar 
    ejb3-persistence-1.0.2.GA.jar 
    log4j-1.2.17.jar 
    persistence-api-1.0.2.jar 
    spring-aop-3.2.4.RELEASE.jar 
    spring-beans-3.2.4.RELEASE.jar 
    spring-context-3.2.4.RELEASE.jar 
    spring-core-3.2.4.RELEASE.jar 
    spring-expression-3.2.4.RELEASE.jar 
    spring-jdbc-3.2.4.RELEASE.jar 
    spring-orm-3.2.4.RELEASE.jar 
    spring-tx-3.2.4.RELEASE.jar 

我已經排除類PA的持久化API-1.0.2.jar日。我花了很多時間來解決這個問題。有人可以幫助解決這個問題。

+0

你想使用hibernate,但忘了包含hibernate依賴關係,你只有spring包裝類。 –

回答

0

我最好的猜測是你需要hibernate-core和hibernate-entitymanager來支持HIbernate。

0

看來你還沒有必要的圖書館! 我更喜歡你使用像Maven這樣的庫依賴管理器。 Maven處理庫之間的依賴關係,你不會再擔心它了。

相關問題