java - Spring Hibernate 查询中的日期

标签 java spring hibernate jpa jpql

我有一种从数据库获取教育事件的方法。不知道为什么它无法运行。看来查询仅在某些情况下失败,但无法真正找出破坏查询的输入参数是什么。我无法从日志中获取有关位置 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)

最佳答案

来自docs

There must be at least one element in the comma separated list that defines the set of values for the IN expression.

确保您传入的参数至少有一个值。

另请查看相关的 question .

关于java - Spring Hibernate 查询中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46829295/

相关文章:

java - Mockito.when then根据输入参数返回

java - ElasticSearch:查询点分隔单词的部分

java - 使用 POST 方法的 Spring 和 ExtJS “Bad Request”

java - 我如何 Autowiring 速度模板?

hibernate @SequenceGenerator 不是全局的

java - AngularJS 应用程序无法从服务器获取列表(Java Spring)

java - 在 Java 或 JavaScript 中显示日期名称为星期五的月份或年份的日期?

java - 如何为字符串Java中的每个字符赋值

java - 如何修复 Atomikos JTA 和 Hibernate 的 Spring 配置?

java - 打破 @Query 的 LIMIT