HSQLDB:原因:使用 MAX,但不使用 Group By,并获取 java.sql.SQLSyntaxErrorException:表达式不在聚合或 GROUP BY 列中:

Posted

技术标签:

【中文标题】HSQLDB:原因:使用 MAX,但不使用 Group By,并获取 java.sql.SQLSyntaxErrorException:表达式不在聚合或 GROUP BY 列中:【英文标题】:HSQLDB: Caused by: Using MAX, but not Group By, and getting java.sql.SQLSyntaxErrorException: expression not in aggregate or GROUP BY columns: 【发布时间】:2017-07-04 05:07:33 【问题描述】:

我收到一条 JPQL 语法错误消息,但我不确定如何修复该语句以获得我需要的内容。我正在使用 HSQLDB 2.4.0 和 Hibernate 5.2.7。

对于给定的日期,我试图找到具有最大 sudokuPuzzleID 的“SudokuPuzzleModel”。因此,下面的 Java/JPQL 代码:

static final private String queryByDateString = 
     "SELECT p FROM SudokuPuzzleModel p " +
     "WHERE p.sudokuPuzzleID = (" +
         "SELECT MAX(p.sudokuPuzzleID) FROM SudokuPuzzleModel pp " +
         "WHERE pp.publicationDate LIKE :publicationDate" +
     ")";

static protected String getQueryByDate()  return queryByDateString; 

static public SudokuPuzzleModel getPuzzleByDate(LocalDate publicationDate) 
    EntityManager entityManager = RootModel.getEntityManagerFactory().createEntityManager();
    SudokuPuzzleModel results = null;

    String queryString = getQueryByDate();
    String jpaParameter = "publicationDate";
    Query query = entityManager.createQuery(queryString).setParameter(jpaParameter, publicationDate);
    results = (SudokuPuzzleModel) query.getSingleResult();

    entityManager.close();    
    return results;

我没有使用 GROUP BY 子句。那么关于如何修改 JPQL 语句以获得我所追求的任何建议?

我所追求的,SudokuPuzzleModel,具有最大的 sudokuPuzzleID,在传入的日期发布。

仅供参考:最初的错误消息是“ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - 尝试在后台线程中获取缓存的 PreparedStatement 时出现问题。” 但是,我认为这是由语法错误引起的。

【问题讨论】:

检查您的混淆层 (=Hibernate) 创建的真实 SQL。 【参考方案1】:

看起来你的 sql 中有错字。看起来您需要 MAX(pp.sudokuPuzzleID) 而不是 MAX(p.sudokuPuzzleID)?

【讨论】:

哇,真快。你太快了,所以不会让我再接受 7 分钟的答案。我进行了更改,现在查询运行良好。谢谢。

以上是关于HSQLDB:原因:使用 MAX,但不使用 Group By,并获取 java.sql.SQLSyntaxErrorException:表达式不在聚合或 GROUP BY 列中:的主要内容,如果未能解决你的问题,请参考以下文章

JPA/Hibernate/HSQLDB 查询但不分配子对象

使用 hsqldb 了解 MERGE INTO

原因:org.hsqldb.HsqlException: invalid statemnet - 导入 CSV 数据时需要文本表

运行基本 Spring Batch 示例时出错 - 原因:java.lang.ClassNotFoundException: org.hsqldb.jdbcDriver

HSQLDB & Hibernate:如何自动创建数据库一次

使用 JAVA 线程在 hsqldb 中进行并发访问