从春季3.2迁移到4.3

时间:2017-06-21 19:00:22

标签: java spring hibernate spring-data-jpa spring-orm

我收到与以下链接中提到的完全相同的问题:

Upgraded from Spring 4.1.6 to 4.2.4 and suddenly getting TransactionRequiredException

对我来说,目标在SharedEntityManagerCreator.java中为null。

我有类似的配置设置和@transactional注释。我看了上面链接中给出的春季门票。

在我的情况下在TransactionSynchronizationManager中(如下所示的行)。对resources.get()的调用返回一个空映射。

private static Object doGetResource(Object actualKey) {
    Map<Object, Object> map = resources.get();
    if (map == null) {
        return null;
    }
}

下面是我的hibernate xml配置:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="com.mycomp"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="persistenceProvider">
        <bean class="org.hibernate.jpa.HibernatePersistenceProvider"/>
    </property>
    <property name="jpaProperties">
        <props>
            <prop key="persistenceUnitName">xxxxPersistenceUnitName</prop>
            <prop key="hibernate.dialect">xxxxPostgreSQLDialectWithHStore</prop>
            <prop key="hibernate.default_schema">phoenix</prop>
            <prop key="hibernate.enable_lazy_load_no_trans">true</prop>
            <prop key="hibernate.show_sql">false</prop>
            <prop key="hibernate.id.new_generator_mappings">true</prop>
            <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
            </prop>
            <prop key="hibernate.cache.use_second_level_cache">false</prop>
            <prop key="hibernate.cache.use_query_cache">false</prop>
        </props>
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

添加更多信息

高层结构

   WebService Endpoint 
        Services Components
            Persistent Service

我的持久服务类`public interface xxxService {

@Transactional
public <T> T update(T entity);

}

@Componen public class xxxxServiceImpl实现了xxxService {

@PersistenceContext(unitName = "xxxx")
private EntityManager entityManager;

@Override
public <T> T update(T entity) {
    return entityManager.merge(entity);
}

}`

我试图将@Transactional注释放在类级别但是给了我同样的错误。 此外,当我调试Spring时,不会为My persistence类创建代理,因为事务注释在该类上。而是在EntityManager上创建它。 (我不确定为什么会出现这种情况,但这就是我观察到的情况。)

我的技术堆栈如果有用:

  1. 从java 7迁移到java 8
  2. 从春季3.2迁移到Spring 4.3
  3. 从hibernate 4.1迁移到5.2.10
  4. 我确实看到以下登录日志文件:

    SVCS 2017-06-29 12:34:06,942 [http-nio-8080-exec-2] INFO oscsPostProcessorRegistrationDelegate $ BeanPostProcessorChecker - 类型为[com.xxxxx.database.xxxxxService]的Bean'scopedTarget.xxxxService'不是有资格获得所有BeanPostProcessors处理(例如:不符合自动代理条件)

    不确定它们是否相关但是它显示了具有entityManager定义的服务(不符合自动代理条件),不确定这是否是导致问题的原因。

0 个答案:

没有答案