0

Update:

Have updated entityManagerFactory bean in my Infrastructure.xml for adding packagesToScan property. But still get the same error.

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter" />
    </property>
    <property name="persistenceUnitName" value="PersistenceUnitAppDeploy" />
    <property name="packagesToScan">
        <array>
            <value>app.repository.entity</value>
        </array>
    </property>
</bean>

Update:

entityManagerFactory bean setting in my Infrastructure.xml.

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter" />
    </property>
    <property name="persistenceUnitName" value="PersistenceUnitAppDeploy" />
</bean>

And jpa repositories setting in my SpringApplication-context.xml

<tx:annotation-driven
    transaction-manager="transactionManager"
    proxy-target-class="true" />

<jpa:repositories
    base-package="devicemanage.repository.appdeploy.dao"
    repository-impl-postfix="Impl"
    entity-manager-factory-ref="entityManagerFactory"
    transaction-manager-ref="transactionManager">
</jpa:repositories>

I have a spring project with openjpa, it works fine when packing as a war and deployed. However, when I tried to using junit for unit test there will throws IllegalStateException.

18:44:57.333 [main] ERROR org.springframework.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@1a531422] to prepare test instance [TestSubtask@7a388990]
java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:91) ~[spring-test-4.1.1.RELEASE.jar:4.1.1.RELEASE]
    at org.springframework.test.context.DefaultTestContext.getApplicationContext(DefaultTestContext.java:74) ~[spring-test-4.1.1.RELEASE.jar:4.1.1.RELEASE]
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:116) ~[spring-test-4.1.1.RELEASE.jar:4.1.1.RELEASE]
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:82) ~[spring-test-4.1.1.RELEASE.jar:4.1.1.RELEASE]
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:212) [spring-test-4.1.1.RELEASE.jar:4.1.1.RELEASE]
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:199) [spring-test-4.1.1.RELEASE.jar:4.1.1.RELEASE]
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:251) [spring-test-4.1.1.RELEASE.jar:4.1.1.RELEASE]
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) [junit-4.11.jar:?]
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:253) [spring-test-4.1.1.RELEASE.jar:4.1.1.RELEASE]
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:216) [spring-test-4.1.1.RELEASE.jar:4.1.1.RELEASE]
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:82) [spring-test-4.1.1.RELEASE.jar:4.1.1.RELEASE]
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) [junit-4.11.jar:?]
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) [junit-4.11.jar:?]
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) [junit-4.11.jar:?]
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) [junit-4.11.jar:?]
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) [junit-4.11.jar:?]
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:60) [spring-test-4.1.1.RELEASE.jar:4.1.1.RELEASE]
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:67) [spring-test-4.1.1.RELEASE.jar:4.1.1.RELEASE]
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) [junit-4.11.jar:?]
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:162) [spring-test-4.1.1.RELEASE.jar:4.1.1.RELEASE]
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) [.cp/:?]
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) [.cp/:?]
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) [.cp/:?]
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) [.cp/:?]
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) [.cp/:?]
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) [.cp/:?]

The main cause is entity name is not a recognized entity or identifier

Caused by: org.apache.openjpa.persistence.ArgumentException: An error occurred while parsing the query filter "SELECT DISTINCT entity.serverMonitorAlertId FROM AlertLog AS entity WHERE (entity.creationTime>:startDate AND entity.creationTime<:endDate) ORDER BY entity.serverMonitorAlertId". Error message: The name "AlertLog" is not a recognized entity or identifier. Known entity names: []
at org.apache.openjpa.kernel.exps.AbstractExpressionBuilder.parseException(AbstractExpressionBuilder.java:119) ~[openjpa-2.2.2.jar:2.2.2]
at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getClassMetaData(JPQLExpressionBuilder.java:197) ~[openjpa-2.2.2.jar:2.2.2]
at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.resolveClassMetaData(JPQLExpressionBuilder.java:167) ~[openjpa-2.2.2.jar:2.2.2]
at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:242) ~[openjpa-2.2.2.jar:2.2.2]
at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateMetaData(JPQLExpressionBuilder.java:212) ~[openjpa-2.2.2.jar:2.2.2]
at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.getCandidateType(JPQLExpressionBuilder.java:205) ~[openjpa-2.2.2.jar:2.2.2]
at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder.access$200(JPQLExpressionBuilder.java:80) ~[openjpa-2.2.2.jar:2.2.2]
at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder$ParsedJPQL.populate(JPQLExpressionBuilder.java:2417) ~[openjpa-2.2.2.jar:2.2.2]
at org.apache.openjpa.kernel.jpql.JPQLParser.populate(JPQLParser.java:61) ~[openjpa-2.2.2.jar:2.2.2]
at org.apache.openjpa.kernel.ExpressionStoreQuery.populateFromCompilation(ExpressionStoreQuery.java:162) ~[openjpa-2.2.2.jar:2.2.2]
at org.apache.openjpa.datacache.QueryCacheStoreQuery.populateFromCompilation(QueryCacheStoreQuery.java:270) ~[openjpa-2.2.2.jar:2.2.2]
at org.apache.openjpa.kernel.QueryImpl.newCompilation(QueryImpl.java:673) ~[openjpa-2.2.2.jar:2.2.2]
at org.apache.openjpa.kernel.QueryImpl.compilationFromCache(QueryImpl.java:654) ~[openjpa-2.2.2.jar:2.2.2]
at org.apache.openjpa.kernel.QueryImpl.compileForCompilation(QueryImpl.java:620) ~[openjpa-2.2.2.jar:2.2.2]
at org.apache.openjpa.kernel.QueryImpl.compileForExecutor(QueryImpl.java:682) ~[openjpa-2.2.2.jar:2.2.2]
at org.apache.openjpa.kernel.QueryImpl.compile(QueryImpl.java:589) ~[openjpa-2.2.2.jar:2.2.2]
at org.apache.openjpa.persistence.EntityManagerImpl.createQuery(EntityManagerImpl.java:997) ~[openjpa-2.2.2.jar:2.2.2]
at org.apache.openjpa.persistence.EntityManagerImpl.createQuery(EntityManagerImpl.java:979) ~[openjpa-2.2.2.jar:2.2.2]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_45]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_45]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_45]
at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_45]
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:342) ~[spring-orm-4.1.1.RELEASE.jar:4.1.1.RELEASE]
at com.sun.proxy.$Proxy32.createQuery(Unknown Source) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_45]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_45]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_45]
at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_45]
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:289) ~[spring-orm-4.1.1.RELEASE.jar:4.1.1.RELEASE]
at com.sun.proxy.$Proxy32.createQuery(Unknown Source) ~[?:?]

The query filter is the very first one in all entities in my project. And the AlertLog class has annotated to @Entity already.

My junit class has annotated as below

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations =
{"file:src/main/resources/ConfigurationFile/Spring/SpringApplication-context.xml",
        "file:src/main/resources/ConfigurationFile/Spring/Infrastructure.xml",
        "file:src/main/resources/ConfigurationFile/Spring/Session.xml",
        "file:src/main/resources/ConfigurationFile/Spring/SystemConfiguration.xml",
        "file:src/main/resources/ConfigurationFile/Spring/Mail.xml"})

The spring, openjpa and spring-data version I currently used are as below

    <springVersion>4.1.1.RELEASE</springVersion>
    <openjpaVersion>2.2.2</openjpaVersion>
    <springDataJpaVersion>1.3.0.RELEASE</springDataJpaVersion>

I don't get it why the entity name is not a recognized entity?

Any help is appreciated.

Bruce
  • 647
  • 2
  • 12
  • 30

1 Answers1

0

Are you using scanning for entities with LocalEntityManagerFactoryBean as entityManagerFactory? It scan only starting class path (for ex /src/java/test).

Then switch to LocalContainerEntityManagerFactoryBean.

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="packagesToScan">
            <array>
                <value>com.test2</value>
            </array>
        </property>
</bean>
Vovka
  • 599
  • 3
  • 10
  • Hi Vovka, thanks for your answer. I have checked the entityManagerFactory bean is using LocalContainerEntityManagerFactoryBean as the updated in my post. But I am not quite sure is my repositories scanning settings correct or not? – Bruce Sep 27 '15 at 19:03
  • try adding to the entityManagerFactory – Vovka Sep 28 '15 at 05:11
  • Have tried to add packagesToScan property as updated in my post. But there still has same error. Thanks – Bruce Sep 28 '15 at 10:21
  • have you tried solutions from here http://stackoverflow.com/questions/3914821/problem-with-using-jpa ? maybe where is any error logged earlier? – Vovka Sep 28 '15 at 10:31