JPA存储库在IDEA和生产中工作,但不在gradle中

时间:2013-10-29 08:37:45

标签: spring hibernate jpa gradle spring-data

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

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

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

我的类有@Entity注释,并从@MappedSuperclass继承另一个类

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

它是带弹簧的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"/>

2 个答案:

答案 0 :(得分:4)

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

sourceSets.main.output.resourcesDir = sourceSets.main.output.classesDir
sourceSets.test.output.resourcesDir = sourceSets.test.output.classesDir

答案 1 :(得分:0)

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