Java 在哪种情况下,我需要提供spring类名作为bean id值?
我需要为DAO配置xml文件。因此,在我的xml文件中,我声明了两个entityManager工厂,我想将其中一个设置为默认持久化单元。我在dao.xml中声明了这一部分,如下所示Java 在哪种情况下,我需要提供spring类名作为bean id值?,java,spring,hibernate,spring-mvc,jpa,Java,Spring,Hibernate,Spring Mvc,Jpa,我需要为DAO配置xml文件。因此,在我的xml文件中,我声明了两个entityManager工厂,我想将其中一个设置为默认持久化单元。我在dao.xml中声明了这一部分,如下所示 <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"> property name="defaultPersistenceUnitName" value="pumps-jpa
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor">
property name="defaultPersistenceUnitName" value="pumps-jpa"/>
</bean>
property name=“defaultPersistenceUnitName”value=“pumps jpa”/>
但是,它对我不起作用,它没有使用默认的持久性单元。我犯了这样的错误
未定义类型为的唯一bean:应为单个bean,但找到2个:
经过大量搜索,我找到了一个代码片段,其中他们提到bean id是spring类名,即org.springframework.context.annotation.internalPersistenceAnnotationProcessor,如下所示
<bean id="org.springframework.context.annotation.internalPersistenceAnnotationProcessor"
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor">
property name="defaultPersistenceUnitName" value="pumps-jpa"/>
</bean>
property name=“defaultPersistenceUnitName”value=“pumps jpa”/>
所以,在提到这个bean id之后,它采用了默认的持久性单元名称。我想知道,为什么我需要提到spring类(org.springframework.context.annotation.internalPersistenceAnnotationProcessor)作为bean id?是黑客还是什么
整个dao.xml声明如下
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="file:${catalina.base}/conf/pumps-dbconfig.properties"/>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass">
<value>${jdbc.driver}</value>
</property>
<property name="jdbcUrl">
<value>${jdbc.url}</value>
</property>
<property name="user">
<value>${jdbc.user}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
<property name="initialPoolSize"><value>10</value></property>
<property name="minPoolSize"><value>10</value></property>
<property name="maxPoolSize"><value>${jdbc.maxConnections}</value></property>
<property name="maxIdleTimeExcessConnections"><value>600</value></property>
<!-- <property name="timeout"><value>0</value></property> --> <!-- 0 means: no timeout -->
<property name="idleConnectionTestPeriod"><value>60</value></property>
<property name="acquireIncrement"><value>5</value></property>
<property name="maxStatements"><value>0</value></property> <!-- 0 means: statement caching is turned off. -->
<property name="numHelperThreads"><value>3</value></property> <!-- 3 is default -->
<property name="unreturnedConnectionTimeout"><value>0</value></property>
<property name="debugUnreturnedConnectionStackTraces"><value>true</value></property>
<property name="testConnectionOnCheckout"><value>true</value></property>
</bean>
<!--
Configuration for Hibernate/JPA
-->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="pumps-jpa" />
<property name="dataSource" ref="dataSource" />
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
</property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="false" />
<property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
<property name="dataSource" ref="dataSource" />
</bean>
<!-- DEFAULT PERSISTENCE UNIT DECLARATION -->
<bean id="org.springframework.context.annotation.internalPersistenceAnnotationProcessor"
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor">
<property name="defaultPersistenceUnitName" value="pumps-jpa"/>
</bean>
<bean id="r-dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass">
<value>${r-jdbc.driver}</value>
</property>
<property name="jdbcUrl">
<value>${r-jdbc.url}</value>
</property>
<property name="user">
<value>${r-jdbc.user}</value>
</property>
<property name="password">
<value>${r-jdbc.password}</value>
</property>
<property name="initialPoolSize"><value>10</value></property>
<property name="minPoolSize"><value>10</value></property>
<property name="maxPoolSize"><value>${r-jdbc.maxConnections}</value></property>
<!-- <property name="timeout"><value>0</value></property> --> <!-- 0 means: no timeout -->
<property name="maxIdleTimeExcessConnections"><value>600</value></property>
<property name="idleConnectionTestPeriod"><value>60</value></property>
<property name="acquireIncrement"><value>5</value></property>
<property name="maxStatements"><value>0</value></property> <!-- 0 means: statement caching is turned off. -->
<property name="numHelperThreads"><value>3</value></property> <!-- 3 is default -->
<property name="acquireRetryAttempts"><value>3</value></property>
<property name="testConnectionOnCheckout"><value>true</value></property>
</bean>
<!--
Configuration for Hibernate/JPA
-->
<bean id="r-entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="pumps-jpa" />
<property name="dataSource" ref="r-dataSource" />
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
</property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="false" />
<property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
</bean>
</property>
</bean>
<bean id="BaseDataConnection" class="com.myntra.commons.dao.impl.BaseDataConnection">
<property name="roEntityManagerFactory" ref="r-entityManagerFactory" />
</bean>
${jdbc.driver}
${jdbc.url}
${jdbc.user}
${jdbc.password}
10
10
${jdbc.maxConnections}
600
60
5.
0
3.
0
真的
真的
${r-jdbc.driver}
${r-jdbc.url}
${r-jdbc.user}
${r-jdbc.password}
10
10
${r-jdbc.maxConnections}
600
60
5.
0
3.
3.
真的
我认为你最初的问题不是你的意思通过配置,您可以将实体管理器的一个现有持久性单元实现称为“默认持久性单元”您可以在XML配置中执行此操作!JPA中的persistence.xml是您的持久性配置。您的bean(配置)xml是指向某些已定义持久性单元的另一个选项。请发布您的整个配置xml 对于Bean ID的其余问题: 容器中已经有一个用相同名称初始化的Bean。
容器正在使用Bean Id作为可识别代码片段的唯一Id!如果您使用另一个名称,那么您的容器将初始化同一类的另一个bean实例并给它另一个名称。然而,正如我在上面指出的,这与你的问题无关!(即使您可以绕过现有的bean实现,并在没有其他选项的情况下重新定义配置!)我认为您最初的问题不是您的意思通过配置,您可以将实体管理器的一个现有持久性单元实现称为“默认持久性单元”您可以在XML配置中执行此操作!JPA中的persistence.xml是您的持久性配置。您的bean(配置)xml是指向某些已定义持久性单元的另一个选项。请发布您的整个配置xml 对于Bean ID的其余问题: 容器中已经有一个用相同名称初始化的Bean。
容器正在使用Bean Id作为可识别代码片段的唯一Id!如果您使用另一个名称,那么您的容器将初始化同一类的另一个bean实例并给它另一个名称。然而,正如我在上面指出的,这与你的问题无关!(即使您可以绕过现有的bean实现,并在没有其他选项的情况下重新定义配置!)发布整个配置xml发布整个配置xml在我的容器中哪个bean具有相同的名称?我没有完全理解你:(你知道。)Id是唯一的。如果您想使用相同的名称/类初始化一个新bean,您需要给它一个新id…在我的容器中哪个bean具有相同的名称?我没有完全理解你:(你知道。)Id是唯一的。如果您想使用相同的名称/类初始化一个新bean,您需要给它一个新id。。。