首页 > 解决方案 > Spring 5 不再向共享 entityManager 注入代理

问题描述

@Configurable
public Class SomeClass {

        @PersistenceContext(type = PersistenceContextType.EXTENDED)
        private EntityManager entityManager;
}

在 spring 4/hibernate 4 中,此代码用于注入提供对共享 entityManager(使用 openEntityManagerInViewFilter 创建)的访问权限的代理,我正在尝试迁移此旧代码库以使用 spring 5 / hibernate 5,但 spring 5正在注入一个实际的 entityManager 实例而不是代理。此管理器由应用程序管理,并且在任何时候都不会关闭,并且会导致连接泄漏。如何恢复旧行为,spring 会在哪里注入代理?

我的配置:

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"
                      mode="aspectj" />
<context:spring-configured />
<bean class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close" id="dataSource">
    <property name="jdbcUrl" value="${database.url}" />
    <property name="driverClass" value="${database.driverClassName}" />
    <property name="user" value="${database.username}" />
    <property name="password" value="${database.password}" />
    <property name="minPoolSize" value="${database.minPoolSize}" />
    <property name="maxPoolSize" value="${database.maxPoolSize}" />
    <property name="preferredTestQuery" value="${database.preferredTestQuery}" />
    <property name="maxIdleTime" value="${database.maxIdleTime}" />
</bean>

<bean class="org.springframework.orm.jpa.JpaTransactionManager"
    id="transactionManager">

    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<bean
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
    id="entityManagerFactory">
    <property name="persistenceUnitName" value="corePersistenceUnit"/>
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan"
        value="some.packages"></property>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
    </property>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
            <prop key="hibernate.generate_statistics">true</prop>
            <prop key="hibernate.jmx.enabled">true</prop>
        </props>
    </property>
</bean>

标签: javaspringhibernatejpa

解决方案


推荐阅读