# Hibernate native query causing duplicate alias issue

**URL:** <https://discourse.hibernate.org/t/hibernate-native-query-causing-duplicate-alias-issue/8221>\
**Category:** Hibernate ORM\
**Created:** [September 8, 2023, 7:48am UTC](https://discourse.hibernate.org/t/hibernate-native-query-causing-duplicate-alias-issue/8221 "2023-09-08T07:48:12Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![neha\_pahuja](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/neha_pahuja/32/2614_2.png) [@neha\_pahuja](https://discourse.hibernate.org/u/neha_pahuja)\
**Post date:** [September 8, 2023, 7:48am UTC](https://discourse.hibernate.org/t/hibernate-native-query-causing-duplicate-alias-issue/8221/1 "2023-09-08T07:48:12Z")

</div>

Hi ,

Upgraded to hibernate 6 native query causing issue with one of the column as the column is common in two table with same name.

Below is the query  
@Query(value = "SELECT \* from PRODUCTS PR INNER JOIN "  
+ “PRODUCT\_DETAILS PD ON PR.PRODUCT\_ID = PD.PRODUCT\_ID”  
+"WHERE PD.INDEX = ‘cean’ "  
+ “ORDER BY PR.CREATION\_DATE”, nativeQuery = true)

---

<div class="post-metadata">

**Author:** ![beikov](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/beikov/32/258_2.png) [@beikov](https://discourse.hibernate.org/u/beikov)\
**Post date:** [September 8, 2023, 12:02pm UTC](https://discourse.hibernate.org/t/hibernate-native-query-causing-duplicate-alias-issue/8221/2 "2023-09-08T12:02:13Z")

</div>

What is the result type of the query? Also, please specify the Hibernate version you are using and show the full stacktrace.

---

<div class="post-metadata">

**Author:** ![neha\_pahuja](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/neha_pahuja/32/2614_2.png) [@neha\_pahuja](https://discourse.hibernate.org/u/neha_pahuja)\
**Post date:** [September 12, 2023, 6:09am UTC](https://discourse.hibernate.org/t/hibernate-native-query-causing-duplicate-alias-issue/8221/3 "2023-09-12T06:09:26Z")

</div>

Version : Hibernate 6

@Query(value = "SELECT \* from PRODUCTS PR INNER JOIN "

- “PRODUCT\_DETAILS PD ON PR.PRODUCT\_ID = PD.PRODUCT\_ID”  
+"WHERE PD.INDEX = ‘cean’ "
- “ORDER BY PR.CREATION\_DATE”, nativeQuery = true)  
List findProduct(@Param(“id”) String dossierId, @Param(“id”) String productId);

Returning the list of class product type

Stack trace

Print org.springframework.orm.jpa.JpaSystemException: Encountered a duplicated sql alias [PRODUCT\_ID] during auto-discovery of a native-sql query  
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:321)  
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:230)  
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:550)  
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)  
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242)  
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:152)  
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)  
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:134)  
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)  
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)  
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)  
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:218)  
at jdk.proxy2/jdk.proxy2.$Proxy221.findProcut(Unknown Source)  
at com.xxx.x.xrest.dao…ProductDao.findProduct(ProductService.java:118)  
at com.xxx.xx.rest.service.ProductService.getProducts(ProductService.java:267)  
at com.xxx.xxx.rest.service.ProductService.showProductHistory(ProductService.java:209)  
at com.xxx.xxx.rest.controller.xxx.ProductHistoryHistory(ProductController.java:187)  
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.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)  
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)  
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)  
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752)  
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)  
at com.XXX.dms.rest.logging.XXX.around(DMSLoggingAspect.java:88)  
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.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:633)  
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:623)  
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71)  
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:173)  
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752)  
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)  
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)  
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:752)  
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:703)  
at com.atradius.dms.rest.controller.DossierController$$SpringCGLIB$$0.dossierHistory()  
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.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207)  
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:152)  
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)  
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:891)  
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:804)  
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)  
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1080)  
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:973)  
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1003)  
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:895)  
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:527)  
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:880)  
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)  
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:223)  
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)  
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)  
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)  
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)  
at org.springframework.web.filter.AbstractRequestLoggingFilter.doFilterInternal(AbstractRequestLoggingFilter.java:289)  
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)  
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)  
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)  
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)  
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)  
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)  
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)  
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)  
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)  
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)  
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)  
at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:108)  
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)  
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)  
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)  
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)  
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)  
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185)  
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158)  
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)  
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)  
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)  
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:119)  
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)  
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)  
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)  
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:400)  
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)  
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)  
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1739)  
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)  
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)  
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)  
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)  
at java.base/java.lang.Thread.run(Thread.java:833)

---

<div class="post-metadata">

**Author:** ![beikov](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/beikov/32/258_2.png) [@beikov](https://discourse.hibernate.org/u/beikov)\
**Post date:** [September 27, 2023, 4:58pm UTC](https://discourse.hibernate.org/t/hibernate-native-query-causing-duplicate-alias-issue/8221/4 "2023-09-27T16:58:45Z")

</div>

Mapping a `Product` with this native query is simply ambiguous. Hibernate doesn’t know that the two same named columns `PRODUCT_ID` for different tables `PRODUCTS` and `PRODUCT_DETAILS` will have the same value.  
Hibernate 6 tries to be safer in this respect and throws an error instead of just silently assuming that the columns have the same value. You will have to use a result set mapping and introduce aliases for the columns to avoid duplicates.
