2

最も多くのポイントを持つユーザーの降順リストを取得する単純なクエリを休止状態で作成しようとしています。基本的に私はこのクエリを書こうとしていますselect user_id from user_points group by user_id order by sum(points) desc。これは、私が取り組んでいる Postgres db で動作します。

次の HSQL クエリがありますselect c.user from UserPoints c group by c.user order by sum(c.points) desc。Points テーブルには、user テーブルを参照する user_id という列があります。このマッピングでは、user_id は User クラスにマップされます。

ただし、このクエリを実行すると、列 "user1_.user_id" が GROUP BY 句に表示されるか、集計関数で使用される必要があります。同様の問題を検索してみましたが、実際にはこれしか思いつきませんでした: JPA Query/Hibernate: Column must appear in the GROUP BY clause or be used in a aggregate function that is unanswered.

他に行う必要があるのは、マップされた関連付けを持たない (しかし user_id キーを持つ) テーブルに参加することであるため、私は HQL に行き詰まっています。また、このクエリをできるだけ高速に保つようにしています。なぜこれが機能しないのか本当に混乱しているので、どんな助けも本当にありがたいです。

4

1 に答える 1

0

それで、問題が何であるかを見つけたかもしれないと思います。実際には、user_id 列への 2 つのマッピングがあります。1 つは user_id を通常の long として持つプロパティで、もう 1 つはそれをユーザー クラスにマップする多対 1 マッピングです。ロギング レベルを debug に設定して、hibernate が作成していたクエリを確認できるようにしました。select c.user を user テーブルのすべての列に変更することを使用していたようです (つまり、多対 1 のマッピングを正しく使用していたことを意味します)。 )、しかし何らかの理由で group by 句で c.user を user_id プロパティに変換していました。マッピングを変更できず、締め切りが迫っているため、通常の SQL クエリを記述してユーザー ID を取得し、別の条件クエリを実行してその ID リスト内のすべてのユーザーを取得することにしました。

于 2013-04-17T15:57:07.680 に答える