2017-09-23 12 views
0

無効なMySQLのクエリを生成し、あなたが持っていたそれぞれの会話の最後のメッセージ。これは、DEVで私のために正常に動作しますが、生産(新しいMySQLデータベースのバージョン)で、私はこのエラーを取得:春ブーツは、私は春のブート1.5.2と次@queryを使用しています(ONLY_FULL_GROUP_BY)

java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'message0_.message_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 

私はこの変更の理由は、しかし、私は方法を見つけることができませんでした何このthreadで読みますこれをJPA/Springで修正してください。私は本番のMySQLデータベースの設定を変更することはできません。また、Springでのアップグレードも避けたいと思います。クエリを修正するにはどうすればよいですか?

+0

"Spring Boot"では、JPAプロバイダ(どちらの?)がそのクエリを作成しません。そして、あなたはACTUAL SQLが呼び出されていることを投稿していません。 – DN1

+0

確かにSpring BootはJPAプロバイダ - > Hibernateを定義します。実際のSQLについては、私はそれを取得しようとします(デバッグログを記録していると思います)。実際のSQLではなくJPQLだけを変更することはできません。 – schneida

+0

JPAプロバイダを(Springに)定義します。そして、実際のSQLを使用して、選択したJPAプロバイダのBUGを報告します。このJPQLをこのデータベースで実行したいと言って、無効なSQLを取得しました。 – DN1

答えて

0

は、ここで定義し、GROUP BY(セクション4.7を参照)条項の目的である:あなたが集約している場合にのみ使用されることを意味

The GROUP BY construct enables the aggregation of result values according to a set of properties.

(SUM、AVG、MAX、MIN、... )フィールドの値(s)。しかし、私の場合、集計機能はありません。だからGROUP BY条項を削除し、すべてがうまくいくはず:このクエリによって返されるすべてのエンティティは、このフィールドの値が同じになるので

SELECT m FROM Message m WHERE m.from.userId = :myId OR m.to.userId = :myId ORDER BY m.date DESC 

userIdにグループ化すると、あまりにも意味がありません。

+0

あなたのソリューションは結果セットを変更しないでしょうか?あなたと私のすべてのチャットパートナーとの間ですべてのチャットメッセージを返すことになると思います。私はこのグループをユニークなものにして、チャット相手(そして他の方に1人)あたり1つのチャットメッセージしか得られません。グループは、私にはっきりとした結果しか与えないと期待されています。 – schneida

+0

"グループによって、私には明確な結果しか得られません"という誤った仮定があり、明確な結果とは関係ありません。 'userId'の値を渡していて、このユーザの値だけが返されます。公式仕様(上で強調表示)で分かるように、 'group by'は集約目的でのみ使用され、集約関数を使用していません。 – ujulu

+0

あなたはこの点については正解ですが、古いMySQLバージョン(まだ最新のMariaDBバージョンなど)では、私のクエリが私の望むものとまったく同じ結果になりました。たぶん、私のユースケースに対する正しいJPAクエリーは何ですか? – schneida

関連する問題