天天看點

關于hibernate中報錯:Encountered a duplicated sql alias [created_by_login] during auto-discovery of a nati

一、報錯:

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'

三、解決:

添加别名、或添加()即可