JPAリポジトリのSETのsql_modeの=(sql_modeの、 'ONLY_FULL_GROUP_BY'、 '@@(REPLACEをSELECT))

グエン・ホアンヴ - K11 FUG HCM:

私はこのようなカスタムクエリを使用しようとしています:

@Query("SELECT i " + 
       "FROM ManagerWorkplace i " + 
       "WHERE i.managerId = ?1 " + 
       "AND i.companyId = ?2 " + 
       "GROUP BY i.zoneId")
List<ManagerWorkplace> findByManagerIdAndCompanyId(Long managerID, Long companyId);

しかし、私はこのエラーを得ました:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SELECTリストの発現#1は、GROUP BY句ではなく、GROUP BY句の列に機能的に依存しない非集約列「db_oem.managerwor0_.id」が含まれています。これはsql_modeの= ONLY_FULL_GROUP_BYと互換性がありません。

私が使用してMySQLの上でこのエラーを修正する方法を知っています

SETのsql_modeの=(sql_modeの、 'ONLY_FULL_GROUP_BY'、 '@@(REPLACEをSELECT))

、JpaRepositoryのために同じことをする方法はありますか?

ericj:

あなたのクエリは大丈夫ではありません。あなたは、グループの結果表にでない列を選択しています。これは、JavaまたはJPAとは何の関係もありません。

あなたによってグループが新しいテーブルを作成していると。すべてのzoneidをするために1行があります。元の表に特定するzoneidを持つ複数の行があると仮定し、少なくとも1つの列にそれらの行において異なる値が存在します。どちらが、それは新しいテーブルに取るべき?これは、実行することはできません。

あなたは、複数の列をグループすることもできます。新しいテーブルでは、これらの列の組み合わせ毎に1行が存在します。

だから、新しいテーブルには、あなたの場合にはzoneidを、によってグループにある列を選択することができます。あなたは、新しいテーブル内の他のどのようなものを置くことができますか?たとえば、列の多くの値がするzoneidのためにそこにありますか。これは行うことができます。または列の最大値または最小値は、(複数の値を持っている覚えて)。また、これは行うことができます。これは、彼らが話していた集合体です。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=207285&siteId=1