1. ホーム

[解決済み】JPQLやHQLでリミットクエリを行うにはどうしたらいいですか?

2022-04-02 18:17:51

質問

Hibernate 3では、以下のMySQLの制限と同等のことをHQLで行う方法はありますか?

select * from a_table order by a_table_column desc limit 0, 20;

setMaxResultsはなるべく使いたくない。これは旧バージョンのHibernate/HQLでは間違いなく可能だったのですが、消えてしまったようです。

どのように解決するのですか?

掲載されました 数年前にHibernateフォーラムで、「なぜHibernate 2ではうまくいったのに、Hibernate 3ではうまくいかないのか」という質問を受けました。

リミットは 決して サポートされている節 をHQLで使用することができます。を使用するよう意図されています。 setMaxResults() を使用します。

ということは、Hibernate 2で動作していたとしても、それは設計上ではなく、偶然だったようです。I 思う これは、Hibernate 2 の HQL パーサーが、クエリのうち HQL と認識した部分を置換し、残りはそのままにしておくので、ネイティブ SQL をこっそり入れることができたからです。しかし、Hibernate 3には、適切なAST HQLパーサーがあり、より寛容になりました。

思うに Query.setMaxResults() は本当に唯一の選択肢です。