HSQLDB:引起:使用MAX而不是Group By,并获取java.sql.SQLSyntaxErrorException:表达式不在聚合或GROUP BY列中:

时间:2017-07-04 05:07:34

标签: java hibernate jpa hsqldb jpql

我收到一条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时出现问题。” 但是,我认为这是由语法错误引起的。

1 个答案:

答案 0 :(得分:2)

看起来像你的SQL中的拼写错误。看起来你需要MAX(pp.sudokuPuzzleID)而不是MAX(p.sudokuPuzzleID)?