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.