gpt4 book ai didi

java - JPA 多持久性单元错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:19:38 25 4
gpt4 key购买 nike

我正尝试在我的项目中再添加一个数据库/架构/persistenceUnit,但我收到错误消息:


No unique bean of type [javax.persistence.EntityManagerFactory] is defined: expected single bean but found 2

我 google/api allot 找不到 spring 提示我的配置的原因。

这是我的 applicationContext.xml 的一部分



<pre><code> <bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="transactionManager" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="${show.hibernate.sql}" />
<property name="generateDdl" value="false" />
<property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect" />
</bean>
</property>
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${database.driver}" />
<property name="url" ...
<property name="testOnBorrow" value="true" />
</bean>

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

<bean id="entityManagerFactoryREST" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSourceREST" />
<property name="persistenceUnitName" value="REST" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="${show.hibernate.sql}" />
<property name="generateDdl" value="false" />
<property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect" />
</bean>
</property>
</bean>

<bean id="dataSourceREST" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${database.driver}" />
...
<property name="testOnBorrow" value="true" />
</bean>

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

<tx:annotation-driven transaction-manager="REST"/>
<tx:annotation-driven transaction-manager="transactionManager"/>
</code></pre>


一些问题:

  • 我需要有两个 tx:annotation-driven 吗?
  • 我需要在工厂中指定 persistenceUnitName 吗?

我在 spring 论坛 ( LINK ) 上写了一些我的 digg 笔记

好吧......任何帮助都会很高兴!

最佳答案

使用 Spring,您只需要一个 EntityManagerFactory。您正在寻找的是第 13.5.1.4 章的 Spring 文档中的描述:“处理多个持久性单元”

我复制/粘贴文本:

“13.5.1.4 处理多个持久化单元

对于依赖多个持久性单元位置的应用程序,存储在类路径中的各种 JARS 中,例如,Spring 提供 PersistenceUnitManager 作为中央存储库并避免持久性单元发现过程,这可能是昂贵的。默认实现允许指定多个位置,这些位置被解析并稍后通过持久性单元名称检索。 (默认情况下,会在类路径中搜索 META-INF/persistence.xml 文件。)

<bean id="pum" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
<property name="persistenceXmlLocations">
<list>
<value>org/springframework/orm/jpa/domain/persistence-multi.xml</value>
<value>classpath:/my/package/**/custom-persistence.xml</value>
<value>classpath*:META-INF/persistence.xml</value>
</list>
</property>
<property name="dataSources">
<map>
<entry key="localDataSource" value-ref="local-db"/>
<entry key="remoteDataSource" value-ref="remote-db"/>
</map>
</property>
<!-- if no datasource is specified, use this one -->
<property name="defaultDataSource" ref="remoteDataSource"/>
</bean>

<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitManager" ref="pum"/>
<property name="persistenceUnitName" value="myCustomUnit"/>
</bean>

默认实现允许在将 PersistenceUnitInfo 实例提供给 JPA 提供程序之前对其进行自定义,通过其属性以声明方式影响所有托管单元,或以编程方式通过 PersistenceUnitPostProcessor 进行自定义,从而允许选择持久性单元。如果未指定 PersistenceUnitManager,则由 LocalContainerEntityManagerFactoryBean 创建并在内部使用。”

关于java - JPA 多持久性单元错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1876504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com