java - 使用 Maven Spring 和 Hibernate 的 Java 问题

标签 java spring hibernate maven

我使用 maven-archetype 创建了一个使用 Spring 和 Hibernate 的 Maven 项目,当使用 JUnit 运行该项目时出现此错误。

    java.lang.IllegalStateException: Failed to load ApplicationContext
        at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
        at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
        at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
        at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
        at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
        at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
        at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [spring_config.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:757)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
        at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
        at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
        at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
        at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:251)
        at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
        at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
        ... 25 more
    Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
        at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:185)
        at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:135)
        at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:389)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1799)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1870)
        at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372)
        at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:454)
        at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:439)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
        ... 40 more
    Caused by: org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]
        at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:138)
        at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:188)
        at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:341)
        at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:506)
        at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:146)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:163)
        ... 49 more
    Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:135)
        ... 58 more
    Caused by: java.lang.NoClassDefFoundError: javassist/util/proxy/MethodFilter
        at org.hibernate.bytecode.internal.javassist.BytecodeProviderImpl.getProxyFactoryFactory(BytecodeProviderImpl.java:56)
        at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactoryInternal(PojoEntityTuplizer.java:249)
        at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:227)
        at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:212)
        at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:82)
        ... 63 more
    Caused by: java.lang.ClassNotFoundException: javassist.util.proxy.MethodFilter
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 68 more

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.helpet</groupId>
  <artifactId>helpet</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>helpet Maven Webapp</name>
  <url>http://maven.apache.org</url>

  <dependencies>  
    <!-- JUnit pruebas -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

    <!-- Sevlets -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>

    <!-- Conector a base de datos MySQL -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.22</version>
    </dependency>

    <!-- Manejo de errores "Log" -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    <!-- Hibernate -->    
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.2.21.Final</version>
    </dependency>

    <!-- Spring  -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency> 
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.3.2.RELEASE</version>
    </dependency> 
  </dependencies>  
  <build>
    <finalName>helpet</finalName>
  </build>
</project>

Spring 配置

    <!-- Obtiene el recurso con la información de la base de datos -->
    <context:property-placeholder location="classpath:configuration/properties/connection.properties" />

    <!-- Creación del datasource -->
    <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <!-- Nombre de la clase del driver -->
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <!-- url de la database -->
        <property name="url" value="${connection.url}"></property>
        <!-- credenciales de sesion -->
        <property name="username" value="${connection.username}"></property>
        <property name="password" value="${connection.password}"></property>
    </bean>

    <!-- Creamos el session Factory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">       
        <property name="dataSource" ref="datasource"></property>
        <property name="mappingLocations" >     
        <list>
        <value>com/helpet/iw/mapping/Country.hbm.xml</value>
        </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="javax.persistence.validation.mode">none</prop>
            </props>
        </property>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
        <property name="dataSource" ref="datasource"></property>
    </bean>

    <bean id="BreedDao" class="com.helpet.iw.dao.hibernate.BreedDaoHibernate">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    <bean id="CityDao" class="com.helpet.iw.dao.hibernate.CityDaoHibernate">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    <bean id="CountryDao" class="com.helpet.iw.dao.hibernate.CountryDaoHibernate">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean> 

    <bean id="LocationDao" class="com.helpet.iw.dao.hibernate.LocationDaoHibernate">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean> 

    <bean id="PetDao" class="com.helpet.iw.dao.hibernate.PetDaoHibernate">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    <bean id="UserDao" class="com.helpet.iw.dao.hibernate.UserDaoHibernate">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean> 

    <bean id="BreedB1" class="com.helpet.logic.implement.BreedB1Imp">
        <constructor-arg name="countryDao" ref="CountryDao"></constructor-arg>      
    </bean>

    <bean id="CityB1" class="com.helpet.logic.implement.CityB1Impl">
        <constructor-arg name="cityDao" ref="CityDao"></constructor-arg>    
        <constructor-arg name="countryDao" ref="CountryDao"></constructor-arg>      
    </bean>

    <bean id="CountryB1" class="com.helpet.logic.implement.CountryB1Imp">
        <constructor-arg name="countryDao" ref="CountryDao"></constructor-arg>      
    </bean>

    <bean id="LocationB1" class="com.helpet.logic.implement.LocationB1Impl">
        <constructor-arg name="userDao" ref="UserDao"></constructor-arg>    
        <constructor-arg name="petDao" ref="PetDao"></constructor-arg>  
        <constructor-arg name="locationDao" ref="LocationDao"></constructor-arg>        
    </bean>

    <bean id="PetB1" class="com.helpet.logic.implement.PetB1Impl">
        <constructor-arg name="petDao" ref="PetDao"></constructor-arg>
        <constructor-arg name="userDao" ref="UserDao"></constructor-arg>
        <constructor-arg name="breedDao" ref="BreedDao"></constructor-arg>      
    </bean>

    <bean id="UserB1" class="com.helpet.logic.implement.UserB1Impl">
        <constructor-arg name="cityDao" ref="CityDao"></constructor-arg>
        <constructor-arg name="countryDao" ref="CountryDao"></constructor-arg>          
    </bean>

    <bean id="CountryTest" class="com.helpet.logic.test.CountryTest">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
</beans>

所有代码位于:https://github.com/carloskike/helpet

最佳答案

来自异常跟踪

java.lang.ClassNotFoundException: javassist.util.proxy.MethodFilter

即找不到javassist.util.proxy.MethodFilter。要下载缺少的 jar,请在 pom.xml 文件的依赖项部分添加以下依赖项条目

<dependency>
    <groupId>javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.12.1.GA</version>
</dependency>

引用:https://www.mkyong.com/hibernate/java-lang-classnotfoundexception-javassist-util-proxy-methodfilter/

关于java - 使用 Maven Spring 和 Hibernate 的 Java 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40275752/

相关文章:

java - 如何设计非EJB负载均衡应用程序?

java - 如何告诉 Hibernate 注解 @Column 区分大小写?

java - 如果在执行 Future.get() 时出现 InterruptedException,为什么我应该执行 Future.cancel()

java - Spring Boot - Hibernate SessionFactory 的句柄

java - 如何将 JSON 字符串反序列化为放宽根值区分大小写的对象?

java - 在集成测试中使用 Spring Boot 测试伪造一个 bean

java - Jackson 用对象值反序列化 Json Patch

java - 在基于java的配置中覆盖xml定义的spring bean

java - Spring AOP 事务管理和 Hibernate : undesired commits to database

java - Spring @Transaction(readOnly = true) 传播到线程