これは期待通りに動作している:なぜORDER BY DATEDIFFがJPAを使用してSQLサーバーで例外を発生させるのですか?
jdbcTemplate.query(
"select datediff(week, '2017-01-02', creation_date), count(*) from somewhere group by datediff(week, '2017-01-02', creation_date)",
new RowMapper() {
Object mapRow(ResultSet rs, int rowNum) throws SQLException {
return [rs.getObject(1), rs.getObject(2)]
}
}
)
をしかし、私は以下のクエリを実行すると、私はこの例外を取得:
SQLServerException: Column 'somewhere.creation_date' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
クエリ:
def date = new Date(117, 0, 2)
jdbcTemplate.query(
"select datediff(week, ?, creation_date), count(*) from somewhere group by datediff(week, ?, creation_date)",
new RowMapper() {
Object mapRow(ResultSet rs, int rowNum) throws SQLException {
return [rs.getObject(1), rs.getObject(2)]
}
},
date,
date
)
JPAの実装は、Hibernate 5.0.11です。 私はSpringを使用しています&デモ用のGroovyですが、実際のコードは明らかに同じ問題があるプレーンなJava + JPA基準です。
これはなぜ機能しないのですか? Group By節にあるものだけを選択しています。そして、日付は同じです:それは同じインスタンスです!
はあなたが試すことができます>> GROUP:
あなたはとてもグループ化し、その結果は同じ中間値を使用することができ、ネストされた文の式を計算する必要があります) –