当前位置: 首页 > 知识库问答 >
问题:

SpringData1.6.0GA无法通过自定义id找到实体管理器工厂bean

薛寒
2023-03-14

我发现了SpringData1.6.0的奇怪行为(降级的版本1.5.2没有这个问题)。这个版本似乎严格要求实体管理器工厂bean的id为“entityManagerFactory”。如果不是,则在运行TestNG测试时出现此错误:

引起原因:org.springframework.beans.factory.BeanCreation异常:创建名为'jpaMapppingContext'的bean时出错:在设置bean属性'entityManager'时,无法创建类型为[org.springframework.orm.jpa.SharedEntityManagerCreator]的内部bean'(内部bean)#36b87404';嵌套异常是org.springframework.beans.factory.BeanCreation异常:错误创建名为'(内部bean)#36b87404'的bean:在设置构造函数参数时,无法解析对bean'entityManagerFactory'的引用;嵌套异常是org.springframework.beans.factory.NoSuchBean定义异常:没有定义名为'entityManagerFactory'的bean

我的配置是:

<!-- ************************************************************** -->
<!-- Database configuration                                     -->
<!-- ************************************************************** -->    

  <!-- Entity manager factory bean -->
    <bean id="entityManagerFactoryCustomId"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="test-system" />
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan">
            <array>
                <value>${pds.db.scan.model}</value>
            </array>
        </property>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">${jdbc.dialect}</prop>
                <prop key="hibernate.show_sql">${jdbc.showsql}</prop>
                <prop key="hibernate.format_sql">${jdb.formatsql}</prop>
                <prop key="hibernate.hbm2ddl.auto">${jdbc.hbm2ddl.auto}</prop>
            </props>
        </property>
    </bean>

  <!-- C3P0 connection pool -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">
        <!-- Connection properties -->
        <property name="driverClass" value="${jdbc.driverClassName}" />
        <property name="jdbcUrl" value="${jdbc.url}" />
        <property name="user" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <!-- Pool properties -->
        <property name="minPoolSize" value="${pool.minsize}" />
        <property name="maxPoolSize" value="${pool.maxsize}" />
        <property name="initialPoolSize" value="${pool.initialPoolSize}" />
        <property name="maxStatements" value="${pool.maxstatements}" />
        <property name="acquireIncrement" value="${pool.acquireincrement}" />
        <property name="preferredTestQuery" value="${jdbc.check}" />
        <property name="numHelperThreads" value="${pool.threads}" />
    </bean>

    <!-- JPA transaction manager -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactoryCustomId" />
    </bean>

  <!-- Activate Spring Data JPA repository support -->
    <jpa:repositories base-package="pds.archiva.db.repository" />
</code>

这是SpringDataJPA中的错误还是我做错了什么?在以下版本的windows java 64位7u55上测试:

spring.framework.version = 4.0.5.RELEASE
spring.security.version = 3.2.4.RELEASE
spring.data-jpa.version = 1.6.0.RELEASE

正如我所写的,相同的测试只适用于更改spring.data-jpa.version=1.5.2.RELEASE。。。或者将bean的id更改为“entityManagerFactory”,而不是“entityManagerFactoryCustomId”。

共有1个答案

党星鹏
2023-03-14

刚刚添加了@StéphaneNicoll答案:然后显式设置实体管理器(请参阅jpa:repositories中的实体管理器工厂refelement)。看起来文档可能已经过时。

 类似资料:
  • 编辑:堆栈跟踪如下: 下面是persistence.xml:

  • 问题内容: 一个很长的问题,请忍受我。 我们将Spring + JPA用于Web应用程序。我的团队在讨论如何在注入的(基于泛型的东西对AppFuse中提供的线DAO,我们不使用过的注射某种原因)。我们正在使用“应用程序管理的持久性”。 反对注入a的论点是它太重了,因此不是必需的,这就是我们需要的。而且,由于Spring将为每个Web请求创建一个DAO的新实例(我对此表示怀疑),因此不会有任何并发​

  • 我试图用JPA2.1、Hibernate和MariaDB创建基本的CRUD。 当我尝试在Tomcat上运行我的项目时,我得到以下错误: 我的数据库正在运行。我通过maven获取我的JDBC驱动程序,并且JAR存在于maven Dependencies文件夹中。下面是persistence.xml(我遵循了Pro JPA2.1教材中的示例): POM:

  • http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd“> 但面对这个例外: 任何帮助都将不胜感激...

  • 我正在为Spring Data JPA存储库编写一个自定义实现。所以我有: = 我的问题是:在的实现中,我需要访问注入SpringData的实体管理器。如何得到它?我可以使用自动连接,但问题是这个存储库必须在设置多个持久性单元的应用程序中工作。因此,要告诉Spring我需要哪一个,我必须使用。然而,由于我的存储库是在可重用服务层中定义的,因此我不知道高级应用程序层将配置注入我的存储库中的持久化单元

  • 问题内容: 我在JavaFx fxml应用程序中都使用了数据库中的Persistence单元和Entity类,我已成功将所有表作为实体导入到Model中,问题是当我尝试插入实体时出现异常和错误,这是我的整个代码 这是当我按下按钮时(当handleButtonAction被触发时)我得到的全部错误。 我在已经存在的类似问题中找不到答案,无法确切知道我所缺少的内容,在此先感谢您的帮助。 问题答案: 为