一、報錯:
org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasException: Encountered a duplicated sql alias [id] during auto-discovery of a native-sql query
at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:594)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1970)
at org.hibernate.loader.Loader.doQuery(Loader.java:829)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289)
at org.hibernate.loader.Loader.doList(Loader.java:2447)
at org.hibernate.loader.Loader.doList(Loader.java:2433)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2263)
at org.hibernate.loader.Loader.list(Loader.java:2258)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:331)
at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1697)
at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:225)
at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:156)
at com.jason.framework.dao.SimpleHibernateDao.querySQLForList(SimpleHibernateDao.java:493)
at com.jason.framework.dao.SimpleHibernateDao$$FastClassByCGLIB$$f5e5a3e.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:689)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)
at com.jason.framework.dao.SimpleHibernateDao$$EnhancerByCGLIB$$a16800aa.querySQLForList(<generated>)
at com.jason.framework.service.BaseServiceImpl.querySQLForList(BaseServiceImpl.java:245)
at com.zh.wuye.safety.service.SafeEduTrainService.findRoleUserByCompCode(SafeEduTrainService.java:161)
at com.zh.wuye.safety.controller.SafeEduTrainController.findRuleUser(SafeEduTrainController.java:532)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
二、原因:
1、可能是關聯查詢是沒有添加别名:
Select後面沒有别名!!!
(注:存儲過程不能select * )
2、可能是關聯表沒有用括号括起來:(這是MySQL的bug)
SELECT X.ID, X.NAME, x.PRICE,x.SALES_PRICE,...........,h.NAME as hotStreetName ,x.DISCOUNT,x.APPRAISE_SCORE
from (PA_PACKAGE x, CO_HOT_STREET h) left join C c
在書寫的過程中x和h都取NAME就報了上面的錯誤;
如果不加後面紅色的括号就會報
Unknown column 'x.ID' in 'on clause'
三、解決:
添加别名、或添加()即可