2014-01-25 18 views
12

我有三個表CREDENTIAL_USERCREDENTIAL_EXPIRATIONASC_DETAILS的自動發現時 - 他們看起來像:NonUniqueDiscoveredSqlAliasException:遇到重複的SQL別名[ASC_ID]原生SQL查詢

CREDENTIAL_USER { ASC_ID, name, ITEM}CREDENTIAL_USER { MONTH, YEAR, ASC_ID}ASC_DETAILS {ASCID, NAME, ROLE}.

我執行一個簡單的本地SQL連接只選擇CREDENTIAL_USER.ASC_ID和ASC_DETAAILS.ASCID爲:

Query query = entityManager.createNativeQuery("SELECT ad.ASCID,ad.NAME,ad.CRED_EMPLOYEE_FNAME,ad.CRED_EMPLOYEE_LNAME,ad.CRED_EMPLOYEE_EMAIL,ad.CRED_EMPLOYEE_REMINDER,"+ 
           " cu.*, ce.*, cl.* FROM ASC_DETAILS ad,CREDENTIAL_USER cu, CREDENTIAL_EXPIRATION ce, CREDENTIAL_LICENSE cl WHERE"+ 
           " cu.IS_CRD_EMPLOYEE = true AND cl.IS_EMPLOYEE = true AND ce.LICENSE_ID = cl.LICENSE_ID AND cu.ASC_ID=ad.ASCID"+ 
           " AND ce.LICENSE_EXP_YR >= "+year+" AND (ce.IS_LICENSE_YES=1 OR ce.IS_LICENSE_YES=3) AND cu.ASC_ID=ce.ASC_ID AND"+ 
           " cu.ID=ce.EMPLOYEE_ID"); 
      List<Object[]> list = query.getResultList(); 

其runni吳細的地方,但是,讓服務器org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasException: Encountered a duplicated sql alias [ASC_ID] during auto-discovery of a native-sql query

例外的JBoss

棧跟蹤:

23:30:00,300 ERROR [stderr] (pool-10-thread-1) javax.persistence.PersistenceException: org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasException: Encountered a duplicated sql alias [ASC_ID] during auto-discovery of a native-sql query 
23:30:00,301 ERROR [stderr] (pool-10-thread-1) at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1361) 
23:30:00,302 ERROR [stderr] (pool-10-thread-1) at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1289) 
23:30:00,303 ERROR [stderr] (pool-10-thread-1) at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:261) 
23:30:00,303 ERROR [stderr] (pool-10-thread-1) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
23:30:00,304 ERROR [stderr] (pool-10-thread-1) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
23:30:00,304 ERROR [stderr] (pool-10-thread-1) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
23:30:00,305 ERROR [stderr] (pool-10-thread-1) at java.lang.reflect.Method.invoke(Method.java:616) 
23:30:00,305 ERROR [stderr] (pool-10-thread-1) at org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:310) 
23:30:00,306 ERROR [stderr] (pool-10-thread-1) at sun.proxy.$Proxy42.getResultList(Unknown Source) 
23:30:00,307 ERROR [stderr] (pool-10-thread-1) at com.asc.dao.UserDAO.getPendingNotificationCredEmployee(UserDAO.java:991) 
23:30:00,307 ERROR [stderr] (pool-10-thread-1) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
23:30:00,308 ERROR [stderr] (pool-10-thread-1) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
23:30:00,308 ERROR [stderr] (pool-10-thread-1) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
23:30:00,309 ERROR [stderr] (pool-10-thread-1) at java.lang.reflect.Method.invoke(Method.java:616) 
23:30:00,309 ERROR [stderr] (pool-10-thread-1) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309) 
23:30:00,310 ERROR [stderr] (pool-10-thread-1) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196) 
23:30:00,311 ERROR [stderr] (pool-10-thread-1) at sun.proxy.$Proxy34.getPendingNotificationCredEmployee(Unknown Source) 
23:30:00,311 ERROR [stderr] (pool-10-thread-1) at com.asc.service.UserService.getPendingNotificationCredEmployee(UserService.java:2661) 
23:30:00,312 ERROR [stderr] (pool-10-thread-1) at com.asc.service.UserService$$FastClassByCGLIB$$de8fbe27.invoke(<generated>) 
23:30:00,312 ERROR [stderr] (pool-10-thread-1) at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 
23:30:00,313 ERROR [stderr] (pool-10-thread-1) at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:617) 
23:30:00,314 ERROR [stderr] (pool-10-thread-1) at com.asc.service.UserService$$EnhancerByCGLIB$$d2e7fa8d.getPendingNotificationCredEmployee(<generated>) 
23:30:00,314 ERROR [stderr] (pool-10-thread-1) at com.asc.service.ExpirationNotificationService.sendAlertToAdmin(ExpirationNotificationService.java:47) 
23:30:00,315 ERROR [stderr] (pool-10-thread-1) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
23:30:00,316 ERROR [stderr] (pool-10-thread-1) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
23:30:00,316 ERROR [stderr] (pool-10-thread-1) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
23:30:00,317 ERROR [stderr] (pool-10-thread-1) at java.lang.reflect.Method.invoke(Method.java:616) 
23:30:00,317 ERROR [stderr] (pool-10-thread-1) at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:273) 
23:30:00,318 ERROR [stderr] (pool-10-thread-1) at org.springframework.scheduling.support.MethodInvokingRunnable.run(MethodInvokingRunnable.java:65) 
23:30:00,318 ERROR [stderr] (pool-10-thread-1) at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:51) 
23:30:00,319 ERROR [stderr] (pool-10-thread-1) at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81) 
23:30:00,320 ERROR [stderr] (pool-10-thread-1) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
23:30:00,320 ERROR [stderr] (pool-10-thread-1) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
23:30:00,321 ERROR [stderr] (pool-10-thread-1) at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
23:30:00,321 ERROR [stderr] (pool-10-thread-1) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:165) 
23:30:00,322 ERROR [stderr] (pool-10-thread-1) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:266) 
23:30:00,323 ERROR [stderr] (pool-10-thread-1) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146) 
23:30:00,323 ERROR [stderr] (pool-10-thread-1) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
23:30:00,324 ERROR [stderr] (pool-10-thread-1) at java.lang.Thread.run(Thread.java:679) 
23:30:00,325 ERROR [stderr] (pool-10-thread-1) Caused by: org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasException: Encountered a duplicated sql alias [ASC_ID] during auto-discovery of a native-sql query 
23:30:00,326 ERROR [stderr] (pool-10-thread-1) at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:594) 

回答

23

CREDENTIAL_USER {ASC_ID,名稱,項目},CREDENTIAL_USER {月,年ASC_ID} 都包含ASC_ID,因此ASC_ID在選擇查詢中變得模糊不清。 選擇你的數據列明智,並給每個列分別別名

0

當第一次使用coalesce時,我也遇到了這個問題。我已通過書面解決:

... 
coalesce(column_name, 'default_value')as key_word, 
... 

在我的查詢中。僅添加合併(column_name,'default_value'),會創建名稱爲​​3210的多個值,併發生此錯誤。希望這有助於像我這樣的人。