HSQLDB:原因:使用 MAX,但不使用 Group By,并得到 java.sql.SQLSyntaxErrorException: expression not in aggregate or GROUP BY columns:
HSQLDB: Caused by: Using MAX, but not Group By, and getting java.sql.SQLSyntaxErrorException: expression not in aggregate or GROUP BY columns:
我收到一条 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,它是在传入的日期发布的。
仅供参考:初始错误消息是“错误 org.hibernate.engine.jdbc.spi.SqlExceptionHelper - 尝试在后台线程中获取缓存的 PreparedStatement 时出现问题。”
但是,我认为这是由语法错误引起的。
您的 sql 看起来像是打字错误。看起来您需要 MAX(pp.sudokuPuzzleID) 而不是 MAX(p.sudokuPuzzleID)?
我收到一条 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,它是在传入的日期发布的。
仅供参考:初始错误消息是“错误 org.hibernate.engine.jdbc.spi.SqlExceptionHelper - 尝试在后台线程中获取缓存的 PreparedStatement 时出现问题。” 但是,我认为这是由语法错误引起的。
您的 sql 看起来像是打字错误。看起来您需要 MAX(pp.sudokuPuzzleID) 而不是 MAX(p.sudokuPuzzleID)?