0

我在我的系统中使用多个数据库。我正在使用AtomikosDataSourceBean在多个数据库之间启用 xa 分布式事务。

spring-configuration.xml文件中,我可以为两个单独的实体管理器工厂 1 和实体管理器工厂 2 创建 bean EntityManagerFactory。但是当我使用 Spring Java@Configuration时,我得到了错误。

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' is defined

如果我将一个创建为 entityManagerFactory,另一个创建为 entityManagerFactory1,则会收到错误消息

Caused by: java.lang.IllegalArgumentException: Not an managed type: class com.tom.boon.core.model.Person

对于在 entityManagerFactory1 下创建的实体。

有人可以帮我弄清楚如何在 Spring Java @Configuration 中定义两个单独的 entityManagerFactory。

4

2 回答 2

0

您并没有真正提供有关配置的太多详细信息。假设它们应该是相当简单的,那么您定义了两个 bean: entityManagerFactory1 和 entityManagerFactory2

第一次使用需要通过@Resource 引用这些:

@Resource(name =  "entityManagerFactory1")
EntityManager entityManager

在其他用法中:

@Resource(name =  "entityManagerFactory2")
EntityManager entityManager

这应该有效,除非有其他问题。如果是这种情况,请提供有关您正在做什么的更多详细信息。希望这可以帮助。

于 2014-03-12T12:57:18.227 回答
0

在您的配置文件中,使用persistenceUnitName如下属性:

<bean id="foo" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSourceFoo"/>
    <property name="persistenceUnitName" value="foo"/>
</bean>

<bean id="bar" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSourceBar"/>
    <property name="persistenceUnitName" value="bar"/>
</bean>

看看dataSource他们有什么不同。dataSourceFoo您可以在和中定义不同的连接属性dataSourceBar。然后只需使用:

@PersistenceContext(unitName = "foo")
private EntityManager foo;

@PersistenceContext(unitName = "bar")
private EntityManager bar;

EntityManagers foo 和 bar 应该连接到不同的数据库。

不要忘记,<context:annotation-config />如果你想让 Spring 识别@PersistenceContext注解,你需要配置文件中的元素。

于 2018-07-03T01:00:46.017 回答