Spring 3+ Hibernate 4 entityInterceptor 未注入 transactionManager
Posted
技术标签:
【中文标题】Spring 3+ Hibernate 4 entityInterceptor 未注入 transactionManager【英文标题】:Spring 3+ Hibernate 4 entityInterceptor not injecting in transactionManager 【发布时间】:2013-12-06 11:27:17 【问题描述】:我在尝试注入 bean 时遇到了一个奇怪的问题, 我总是得到这个堆栈跟踪:
引起:org.springframework.beans.factory.BeanCreationException: 创建类中定义的名称为“transactionManager”的 bean 时出错 路径资源 [applicationContext.xml]:设置属性值时出错; 嵌套异常是 org.springframework.beans.NotWritablePropertyException:无效 bean 类的属性“entityInterceptor” [org.springframework.orm.hibernate4.HibernateTransactionManager]:豆 属性“entityInterceptor”不可写或设置器无效 方法。 setter的参数类型是否与返回类型匹配 吸气剂?
当我尝试这样做时:
<bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
<property name="entityInterceptor" ref="auditInterceptor" />
</bean>
我确实检查了org.springframework.orm.hibernate4.HibernateTransactionManager
,它确实有entityInterceptor
的setter 和我的auditInterceptor
extends EmptyInterceptor
,它实现了这些方法。
我在这里看不到我做错了什么?
我搜索了各种方法来为 spring+hibernate 4 配置创建拦截器,我不想使用 envers 也不想以编程方式执行此操作。
【问题讨论】:
您可以发布您使用管理器的课程吗...? 确保您使用的是 Spring 版本 > 3.2.1,它是在 3.2.2 中添加的。我猜你使用的是旧版本... 【参考方案1】:请确保您添加了正确版本的 Spring jar 文件,它应该大于版本 3.2.1
注意下面的配置:
applicationContext.xml
<bean name="auditInterceptor" class="com.mypackage.AuditInterceptor" />
<bean id="myDatasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="$jdbc.mydbDriverClassName"/>
<property name="jdbcUrl" value="$jdbc.mydbUrl"/>
<property name="user" value="$jdbc.mydbUsername"/>
<property name="password" value="$jdbc.mydbPassword"/>
<!-- Common properties for all DS -->
<property name="initialPoolSize" value="$jdbc.initialPoolSize"/>
<property name="maxPoolSize" value="$jdbc.maxPoolSize"/>
<property name="minPoolSize" value="$jdbc.minPoolSize"/>
<property name="acquireIncrement" value="$jdbc.acquireIncrement"/>
<property name="acquireRetryAttempts" value="$jdbc.acquireRetryAttempts"/>
<property name="preferredTestQuery" value="$jdbc.preferredTestQuery"/>
<property name="idleConnectionTestPeriod" value="$jdbc.idleConnectionTestPeriod"/>
</bean>
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="myDatasource"/>
<property name="configurationClass">
<value>org.hibernate.cfg.AnnotationConfiguration</value>
</property>
<property name="packagesToScan" value="com.mypackage" />
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="mySessionFactory"/>
<property name="entityInterceptor" ref="auditInterceptor" />
</bean>
拦截器类
package com.mypackage;
public class AuditInterceptor extends EmptyInterceptor
@Override
public boolean onFlushDirty(Object entity, Serializable id,
Object[] currentState, Object[] previousState,
String[] propertyNames, Type[] types)
//method body
@Override
public boolean onSave(Object entity, Serializable id, Object[] state,
String[] propertyNames, Type[] types)
//method body
希望这能解决您的问题
【讨论】:
问题指定Hibernate 4。以上是关于Spring 3+ Hibernate 4 entityInterceptor 未注入 transactionManager的主要内容,如果未能解决你的问题,请参考以下文章
GWT 开发模式 + Spring 3.1 + Hibernate 4.0.1 中的异常
Struts2.3.4.1+Spring3.2.3+Hibernate4.1.9整合
如何使用 Spring-Security 3 和 Hibernate 4 将 spring security xml 配置 hibernate 转换为 java config
Spring 4.1.0.RELEASE 和 Hibernate 4.3.6.Final 的依赖关系问题
在Spring(4.3.22)中集成Hibernate(5.4.0)
Spring 3+ Hibernate 4 entityInterceptor 未注入 transactionManager