I have spring boot application with 3.1.2 version and trying to migrate spring boot to the latest version i.e 3.3.2. But I am facing problem while running Test Suite. I am using TestNG v7.4.0
org.testng
testng
7.4.0
test
I have abstract class which extends AbstractTestNGSpringContextTtests
@ContextConfiguration(locations={"classpath:service-data-context.xml"})
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, TransactionalTestExecutionListener.class})
@Transactional
public abstract class ServiceAbstractDaoTest extends AbstractTestNGSpringContextTests {
...
}
Inside service-data-context.xml , I have declared all the bean classes.
I have one more class which extends ServiceAbstractDaoTest
public class DaoImplTest extends ServiceAbstractDaoTest {
@Autowired
private UserDao userDao;
@Test
public void testUser() {
...
}
}
If I try to build the project with maven clean install, I am getting below error
[ERROR] springTestContextPrepareTestInstance(com.service.dao.DaoImplTest) Time elapsed: 0.02 s <<< FAILURE!
java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [MergedContextConf
iguration@1183e952 testClass = com.service.dao.DaoImplTest, locations = ["classpath:service-data-context.xml"], classes = [], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties =
[], contextCustomizers = [org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@4b6d92e, org.springframework.boot.test.json.Du
plicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@e9ef5b6, org.springframework.boot.test.mock.mockito.MockitoContextCus
tomizer@0, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustom
izer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.
servlet.WebDriverContextCustomizer@6069dd38], contextLoader = org.springframework.test.context.support.DelegatingSmartContextLoader, parent = null]
[ERROR] springTestContextBeforeTestMethod(com.service.dao.DaoImplTest) Time elapsed: 0.043 s <<< FAILURE!
java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [MergedContextConf
iguration@1183e952 testClass = com.service.dao.DaoImplTest, locations = ["classpath:service-data-context.xml"], classes = [], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties =
[], contextCustomizers = [org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@4b6d92e, org.springframework.boot.test.json.Du
plicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@e9ef5b6, org.springframework.boot.test.mock.mockito.MockitoContextCus
tomizer@0, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustom
izer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.
servlet.WebDriverContextCustomizer@6069dd38], contextLoader = org.springframework.test.context.support.DelegatingSmartContextLoader, parent = null]
[INFO]
[INFO] Results:
[INFO]
[ERROR] Failures:
[ERROR] com.service.dao.DaoImplTest.springTestContextBeforeTestMethod(com.service.dao.DaoImplTest)
[ERROR] Run 1: DaoImplTest>AbstractTestNGSpringContextTests.springTestContextBeforeTestMethod:131 » IllegalState
[ERROR] Run 2: DaoImplTest>AbstractTestNGSpringContextTests.springTestContextBeforeTestMethod:131 » IllegalState
[ERROR] Run 3: DaoImplTest>AbstractTestNGSpringContextTests.springTestContextBeforeTestMethod:131 » IllegalState
[ERROR] Run 4: DaoImplTest>AbstractTestNGSpringContextTests.springTestContextBeforeTestMethod:131 » IllegalState
[ERROR] Run 5: DaoImplTest>AbstractTestNGSpringContextTests.springTestContextBeforeTestMethod:131 » IllegalState
[INFO]
[ERROR] DaoImplTest>AbstractTestNGSpringContextTests.springTestContextPrepareTestInstance:119 » IllegalState
[ERROR] com.service.dao.DaoImplTest.springTestContextBeforeTestMethod(com.service.dao.DaoImplTest)
[ERROR] Run 1: DaoImplTest>AbstractTestNGSpringContextTests.springTestContextBeforeTestMethod:131 » IllegalState
[ERROR] Run 2: DaoImplTest>AbstractTestNGSpringContextTests.springTestContextBeforeTestMethod:131 » IllegalState
[ERROR] Run 3: DaoImplTest>AbstractTestNGSpringContextTests.springTestContextBeforeTestMethod:131 » IllegalState
[ERROR] Run 4: DaoImplTest>AbstractTestNGSpringContextTests.springTestContextBeforeTestMethod:131 » IllegalState
[ERROR] Run 5: DaoImplTest>AbstractTestNGSpringContextTests.springTestContextBeforeTestMethod:131 » IllegalState
[ERROR] Run 6: DaoImplTest>AbstractTestNGSpringContextTests.springTestContextBeforeTestMethod:131 » IllegalState
[ERROR] Run 7: DaoImplTest>AbstractTestNGSpringContextTests.springTestContextBeforeTestMethod:131 » IllegalState
[ERROR] Run 8: DaoImplTest>AbstractTestNGSpringContextTests.springTestContextBeforeTestMethod:131 » IllegalState
[ERROR] Run 9: DaoImplTest>AbstractTestNGSpringContextTests.springTestContextBeforeTestMethod:131 » IllegalState
Stack trace while running the test suite:
java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@f45efe8 testClass = com.service.dao.impl.DaoImplTest, locations = ["classpath:service-data-context.xml"], classes = [], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = [], contextCustomizers = [org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@76c3e77a, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@2a54a73f, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@17497425], contextLoader = org.springframework.test.context.support.DelegatingSmartContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:142)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:98)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at org.springframework.test.context.testng.AbstractTestNGSpringContextTests.springTestContextPrepareTestInstance(AbstractTestNGSpringContextTests.java:119)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:133)
at org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:62)
at org.testng.internal.ConfigInvoker.invokeConfigurationMethod(ConfigInvoker.java:385)
at org.testng.internal.ConfigInvoker.invokeConfigurations(ConfigInvoker.java:321)
at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:176)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:122)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at org.testng.TestRunner.privateRun(TestRunner.java:794)
at org.testng.TestRunner.run(TestRunner.java:596)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:377)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:371)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:332)
at org.testng.SuiteRunner.run(SuiteRunner.java:276)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1212)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1134)
at org.testng.TestNG.runSuites(TestNG.java:1063)
at org.testng.TestNG.run(TestNG.java:1031)
at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:105)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [service-data-context.xml]: [PersistenceUnit: rc360-wsa-pu] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.query.NamedQueryValidationException: Errors in named queries:
[1] Error in query named 'getAssetDetailOfUser': Cannot compare left expression of type 'java.lang.String' with right expression of type 'java.lang.Object'
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1234)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:952)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:221)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:110)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:212)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152)
... 30 more
Caused by: jakarta.persistence.PersistenceException: [PersistenceUnit: rc360-wsa-pu] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.query.NamedQueryValidationException: Errors in named queries:
[1] Error in query named 'getAssetDetailOfUser': Cannot compare left expression of type 'java.lang.String' with right expression of type 'java.lang.Object'
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:421)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1833)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782)
... 44 more
Caused by: org.hibernate.query.NamedQueryValidationException: Errors in named queries:
[1] Error in query named 'getAssetDetailOfUser': Cannot compare left expression of type 'java.lang.String' with right expression of type 'java.lang.Object'
at org.hibernate.query.internal.NamedObjectRepositoryImpl.validateNamedQueries(NamedObjectRepositoryImpl.java:230)
at org.hibernate.query.internal.QueryEngineImpl.validateNamedQueries(QueryEngineImpl.java:215)
at org.hibernate.boot.internal.SessionFactoryObserverForNamedQueryValidation.sessionFactoryCreated(SessionFactoryObserverForNamedQueryValidation.java:39)
at org.hibernate.internal.SessionFactoryObserverChain.sessionFactoryCreated(SessionFactoryObserverChain.java:35)
at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:315)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:450)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1507)
at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:142)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)
... 48 more
Suppressed: org.hibernate.query.SemanticException: Cannot compare left expression of type 'java.lang.String' with right expression of type 'java.lang.Object'
at org.hibernate.query.sqm.internal.TypecheckUtil.assertComparable(TypecheckUtil.java:358)
at org.hibernate.query.sqm.tree.predicate.SqmComparisonPredicate.(SqmComparisonPredicate.java:48)
at org.hibernate.query.sqm.tree.predicate.SqmComparisonPredicate.(SqmComparisonPredicate.java:34)
at org.hibernate.query.hql.internal.SemanticQueryBuilder.createComparisonPredicate(SemanticQueryBuilder.java:2448)
at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitComparisonPredicate(SemanticQueryBuilder.java:2392)
at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitComparisonPredicate(SemanticQueryBuilder.java:269)
at org.hibernate.grammars.hql.HqlParser$ComparisonPredicateContext.accept(HqlParser.java:6164)
at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitAndPredicate(SemanticQueryBuilder.java:2262)
at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitAndPredicate(SemanticQueryBuilder.java:269)
at org.hibernate.grammars.hql.HqlParser$AndPredicateContext.accept(HqlParser.java:6039)
at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitAndPredicate(SemanticQueryBuilder.java:2261)
at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitAndPredicate(SemanticQueryBuilder.java:269)
at org.hibernate.grammars.hql.HqlParser$AndPredicateContext.accept(HqlParser.java:6039)
at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitWhereClause(SemanticQueryBuilder.java:2244)
at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitWhereClause(SemanticQueryBuilder.java:269)
at org.hibernate.grammars.hql.HqlParser$WhereClauseContext.accept(HqlParser.java:5905)
at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitQuery(SemanticQueryBuilder.java:1159)
at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitQuerySpecExpression(SemanticQueryBuilder.java:941)
at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitQuerySpecExpression(SemanticQueryBuilder.java:269)
at org.hibernate.grammars.hql.HqlParser$QuerySpecExpressionContext.accept(HqlParser.java:1869)
at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitSimpleQueryGroup(SemanticQueryBuilder.java:926)
at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitSimpleQueryGroup(SemanticQueryBuilder.java:269)
at org.hibernate.grammars.hql.HqlParser$SimpleQueryGroupContext.accept(HqlParser.java:1740)
at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitSelectStatement(SemanticQueryBuilder.java:443)
at org.hibernate.query.hql.internal.SemanticQueryBuilder.visitStatement(SemanticQueryBuilder.java:402)
at org.hibernate.query.hql.internal.SemanticQueryBuilder.buildSemanticModel(SemanticQueryBuilder.java:311)
at org.hibernate.query.hql.internal.StandardHqlTranslator.translate(StandardHqlTranslator.java:71)
at org.hibernate.query.internal.NamedObjectRepositoryImpl.lambda$checkNamedQueries$5(NamedObjectRepositoryImpl.java:252)
at org.hibernate.query.internal.QueryInterpretationCacheStandardImpl$1.translate(QueryInterpretationCacheStandardImpl.java:111)
at org.hibernate.query.internal.QueryInterpretationCacheStandardImpl.createHqlInterpretation(QueryInterpretationCacheStandardImpl.java:165)
at org.hibernate.query.internal.QueryInterpretationCacheStandardImpl.resolveHqlInterpretation(QueryInterpretationCacheStandardImpl.java:147)
at org.hibernate.query.internal.QueryInterpretationCacheStandardImpl.resolveHqlInterpretation(QueryInterpretationCacheStandardImpl.java:107)
at org.hibernate.query.internal.NamedObjectRepositoryImpl.checkNamedQueries(NamedObjectRepositoryImpl.java:249)
at org.hibernate.query.internal.NamedObjectRepositoryImpl.validateNamedQueries(NamedObjectRepositoryImpl.java:219)
... 57 more
Can anyone please help me to understand why I am getting NamedQueryValidationException when the spring boot is migrated to 3.3.2 from 3.1.2?