0

我正在使用 Spring 数据 JPA 存储库。

我的测试在 IDEA 中运行良好,生产代码在 Tomcat 中运行,但是在运行 gradle 测试时我收到无法创建应用程序上下文的异常

... 61 more
Caused by: java.lang.IllegalArgumentException: Not an managed type: class com.test.FullNamespaceConfig

我的班级有@Entity 注释并从另一个具有@MappedSuperclass 的班级继承

这里可能有什么问题?在 IDEA 和 gradle 中运行有什么区别(IDEA 项目是使用 gradle idea 生成的)

它是带有 spring 的 gradle 模块:

<context:annotation-config/>
<context:component-scan base-package="com.test.dao"/>
<context:component-scan base-package="com.test.reports"/>

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

<bean id="dataSource"
      class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${database.driver}"/>
    <property name="url" value="${database.url}"/>
    <property name="username" value="${database.user}"/>
    <property name="password" value="${database.password}"/>

</bean>

<!-- Declare a JPA entityManagerFactory-->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

    <property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml"></property>
    <property name="persistenceUnitName" value="hibernatePersistenceUnit"/>
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="${database.showSql}"/>
            <property name="databasePlatform" value="${hibernate.dialect}"/>
        </bean>
    </property>
    <property name="jpaDialect">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
    </property>
    <property name="packagesToScan" value="com.test"/>
</bean>

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

<jpa:repositories base-package="com.test.dao"/>
4

2 回答 2

4

Gradle 将类和资源放在单独的输出目录中,这是 JPA 不喜欢的。尝试:

sourceSets.main.output.resourcesDir = sourceSets.main.output.classesDir
sourceSets.test.output.resourcesDir = sourceSets.test.output.classesDir
于 2013-10-29T10:04:09.657 回答
0

信息有限,但似乎 com.test.FullNamespaceConfig 是一个实体,对吗?它驻留在您的测试项目中吗?如果是这样,那么您可能在测试项目中缺少一个 persistence.xml 文件,这意味着未检测到该实体。如果您可以提供有关项目结构的更多数据,那将会很有帮助。

于 2013-10-29T08:57:50.067 回答