2017-10-19 129 views
0

我有一種方法從數據庫中獲取教育事件。不知道爲什麼它無法運行。看起來查詢僅在某些情況下失敗,但無法真正找出破壞它的輸入參數。我無法從日誌中獲得關於位置1853處的語法錯誤的任何提示。您是否有任何想法導致問題或如何進一步調試該方法?春天的日期冬眠的查詢

public List<EE> findEEs(S s, List<EM> eMs, E e) { 
    TypedQuery<EE> query = entityManager.createQuery(
     "select distinct ee from EE ee left join ee.lSE lse " 
      + "where ee.eM in (:em) " 
      + "and (ee.scope = :publicScope " 
      + "or (ee.scope = :limitedScope and (ee.hE= :e or :e in lse)) " 
      + "or (ee.scope = :localScope and ee.hE = :education)) " 
      + "and ee.status = :status and ee.startDate > :now " 
      + "and (ee.groupSize = 0 or (ee.groupSize > 0 " 
      + " and ee.groupSize > (ee.numberOfStudents + ee.reservedSeats))) " 
      + "and ee.id not in (select pee.eE.id from PEE pee " 
      + "where studentStatus.s = :s and eE.eM in (:em))", 
     EE.class); 

    query.setParameter("s", s); 
    query.setParameter("em", eMs); 
    query.setParameter("publicScope", PUBLIC); 
    query.setParameter("limitedScope", LIMITED); 
    query.setParameter("localScope", LOCAL); 
    query.setParameter("e", e); 
    query.setParameter("status", CONFIRMED); 
    query.setParameter("now", new DateTime()); 

    return query.getResultList(); 

日誌顯示這一點:

2017-10-19 14:46:32,673 [http-nio-8090-exec-10] WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: 42601 
2017-10-19 14:46:32,674 [http-nio-8090-exec-10] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - ERROR: syntax error at or near ")" 
    Position: 1853 
lokakuuta 19, 2017 2:46:32 IP. org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver logException 
WARNING: Resolved exception caused by Handler execution: org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet 

Data access failure 

Sorry, a problem occurred while accessing the database. 

org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:384) 
org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:246) 
org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:491) 
org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59) 
org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) 
org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147) 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) 
org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282) 
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) 
com.sun.proxy.$Proxy435.findUnaddedEducationEvents(Unknown Source) 
+0

你確定你的':em'參數永遠不是空的嗎?你正在使用什麼版本的休眠?它是'> ='3.6.1嗎? –

+0

請增加休眠日誌記錄(查詢+綁定參數)...爲一個失敗的....我懷疑joda(?)DateTime是責怪.. – xerx593

+0

@AbdullahKhan,其實這是一個很好的觀點。 :em參數確實有時是空的,但不應該查詢返回空結果列表而不是失敗? – krltos

回答

1

從逗號分隔的列表的docs

必須有至少一種元素 限定用於IN的設定值的表達。

確保您傳入的參數至少有一個值。

也查看相關question

+0

@krltos - 這是否以任何方式幫助你!? –

+0

是的,它解決了這個問題。謝謝! – krltos