java - 在一个简单的Spring+Hibernate应用程序中,如何解析 "Unrecognized listener type"?

标签 java spring hibernate spring-orm

我正在尝试使用 Spring(3.0.3) 和 Hibernate(3.6.10) 运行应用程序。

当我删除创建 sessionfactory bean 的行时,一切正常。 出现上述异常如何解决? 我是否缺少任何配置/jar?

PFB 我的 Spring 配置文件 -

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd" default-autowire="byType">


<!-- Basic data source -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/hibernate" />
    <property name="username" value="root" />
    <property name="password" value="root" />
</bean>

 <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" autowire="byType">
    <!-- <property name="dataSource" ref="dataSource" /> -->

    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>
        </props>
    </property>
    <property name="mappingResources">
        <array>
            <value>person.hbm.xml</value>
        </array>
    </property>
</bean> 
<bean class="com.impl.PersonServiceImpl" name="personService"></bean>

我的 Hibernate Mapping for Person 类是这样的 -

<hibernate-mapping>

<class name="com.intf.Person" table="person">
    <id name="id" column="id" type="int">
    <generator class="identity"></generator>
    </id>
    <property name="name" column="name" type="string"></property>
    <property name="address" column="address" type="string"></property>
    <property name="age" column="age" type="int"></property>
    <property name="dob" column="dob" type="java.util.Date"></property>

</class>
</hibernate-mapping>

当我尝试使用 JUnit 运行上述应用程序时,出现以下异常 -

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Unrecognized listener type [org.springframework.context.annotation.internalConfigurationAnnotationProcessor]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1412)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:557)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:84)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:1)
    at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:280)
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:304)
    ... 24 more
Caused by: org.hibernate.MappingException: Unrecognized listener type [org.springframework.context.annotation.internalConfigurationAnnotationProcessor]
    at org.hibernate.event.EventListeners.getListenerClassFor(EventListeners.java:152)
    at org.hibernate.cfg.Configuration.setListener(Configuration.java:2451)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:763)
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409)
    ... 37 more

最佳答案

我确实通过在 Spring 配置文件中进行以下更改来解决这个问题。我将自动接线类型更改为“byName”而不是“byType”。我想当我们设置 Autowiring byType 时,hibernate 会查找监听器类“org.springframework.context.annotation.internalConfigurationAnnotationProcessor”。但由于 Spring 3.0.3 或 Spring 4.1.0 版本中不存在此类,因此无法加载 sessionFactory bean -

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" **autowire="byName"**> 

<property name="hibernateProperties">
    <props>
        <prop key="hibernate.show_sql">true</prop>
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
        <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>
    </props>
</property>
<property name="mappingResources">
    <array>
        <value>person.hbm.xml</value>
    </array>
</property>

关于java - 在一个简单的Spring+Hibernate应用程序中,如何解析 "Unrecognized listener type"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42493559/

相关文章:

java joptsimple 获取两个带参数的选项

java - 我们总是需要使用CacheManager吗?

java - 单个 reSTLet 资源的多个获取方法

java - 使用 UI.getCurrent().navigate 从另一个类导航时,类中的异步更新不起作用

java - 可执行 jar 文件中的 BeanDefinitionParsingException

hibernate - 在 grails/hibernate 中使用 uuid 或 guid 作为 id

java - 如何使用 Java API 从 Google+ 获取好友?

java - 使用数据库@Entity 类进行 REST 公开?

java - 如何使用 hibernate 标准对子对象应用 DISTINCT

java - Hibernate 对父类的查询会创建无效的联合查询