【问题标题】:Spring data jpa + Spring Transaction for multiple databaseSpring data jpa + Spring Transaction 用于多个数据库
【发布时间】:2016-10-21 18:38:30
【问题描述】:

我正在使用带有@Transaction 的spring data jpa 为我的服务实现多个事务(数据库),具有两个持久单元名称。并在 Jboss 6.4 EAP 中部署

spring xml 包括

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:jee="http://www.springframework.org/schema/jee"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans.xsd
             http://www.springframework.org/schema/data/jpa
             http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
             http://www.springframework.org/schema/tx 
             http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
             http://www.springframework.org/schema/context 
             http://www.springframework.org/schema/context/spring-context-3.1.xsd
             http://www.springframework.org/schema/mvc
             http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
             http://www.springframework.org/schema/jee 
             http://www.springframework.org/schema/jee/spring-jee-3.1.xsd">

    <context:annotation-config />
    <tx:annotation-driven />
    <context:component-scan base-package="com.test.demo.domain.service" />
    <context:component-scan base-package="com.test.demo.domain" />
    <bean id="entityManagerFactory"
              class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="demo-domain" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
        </property>
        <property name="persistenceProviderClass" value="org.hibernate.ejb.HibernatePersistence" />
    </bean>

    <bean id="entityManagerFactoryMeta"
              class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="demo-meta" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
        </property>
        <property name="persistenceProviderClass" value="org.hibernate.ejb.HibernatePersistence" />
    </bean>
    <bean id="persistenceExceptionTranslationPostProcessor"
              class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
        <qualifier value="demoadmin"/>
    </bean>
    <bean id="transactionManagerMeta" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactoryMeta" />
        <qualifier value="demoappmeta"/>
    </bean>

    <jpa:repositories base-package="com.test.demo.domain.repository" />

</beans>

以下是我的服务详情

@Named(ServerConstants.SERVICE_DRAG_DROP)
**@Transactional("demoappmeta")**
public class DragDropService {
    private static final Logger LOG = LoggerFactory.getLoggerFactory().getDomainLogger(ServerConstants.LOGGER_DOMAIN, DragDropService.class.toString());

    @Inject
    private TbAsmiDragDropRepository dragDropRepo;

    public void createDragDrop(Message pMessage){
        JSONObject requestJson = pMessage.getRequestObject().getRequestJson();
        LOG.debug("inside createDragDrop() - Request : "+requestJson);

在 Jboss 中我无法部署它,我得到以下异常:

引起:org.springframework.beans.factory.BeanCreationException: 无法自动装配字段:私有 com.test.demo.domain.repository.TbAsmiDragDropRepository com.test.demo.domain.service.DragDropService.dragDropRepo;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 创建名为“tbAsmiDragDropRepository”的 bean 时出错:调用 初始化方法失败;嵌套异常是 java.lang.IllegalArgumentException:不是托管类型:类 com.test.demo.domain.entity.TbAsmiDragDrop

如有遗漏或有问题,请指教

【问题讨论】:

    标签: spring spring-data-jpa spring-transactions jboss6.x spring-repositories


    【解决方案1】:

    我找到了解决方案,只是我们必须在

    中设置属性 entity-manager-factory-ref="en​​titymanagerfactoryrefname"
    <jpa:repositories base-package="com.test.demo.domain.repository" entity-manager-factory-ref="entitymanagerfactoryrefname" />
    

    【讨论】:

      猜你喜欢
      • 2012-04-11
      • 2019-07-24
      • 2014-12-06
      • 1970-01-01
      • 2018-01-21
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多