バッキングデータベースのリアルタイム検索を実行する必要がある読み取り専用サービスについて考えてみます。サービスは、マルチテーブルオブジェクトに基づいて要約、レポート、および結果を生成するために、かなり複雑な選択クエリを生成できる必要があります。ライブラリ/フレームワークの選択の優先順位は、(SQLの)パフォーマンス、保守性、および寿命です。
Hibernate-正しいSQLを生成するために「トリック」が必要なようです。CriteriaAPIは有望に見えますが、任意のクエリに関してはいくつかの制限もあります。
MyBatis -CriteriaのようなAPIはありませんが、明確でクリーンであり、Hibernateのトリックやtweeksを必要としないことがよくあります。限られたデータベースの抽象化。
その他のまだ評価されていないソリューションには、SQLBuilder、Squiggle、Querydsl、JOOQ、またはカスタムソリューションが含まれます。
SOユーザーが見つけたものは、高速で用途の広い検索サービスを作成するのに最適です。
[更新] -Hibernateで直面したトリックと問題のいくつかは...
- https://hibernate.onjira.com/browse/HHH-879
- https://hibernate.onjira.com/browse/HHH-5291
- Where句をセカンダリテーブルに適用する方法
- https://forum.hibernate.org/viewtopic.php?f=1&t=973514
一般に、同じテーブルに2回結合すると、問題が発生するようです。エンティティの最初のインスタンスをキャッシュし、冗長な場合は2番目の結合からの列を想定したため、Hibernateをだまして正しいSQLを生成させ、結果を誤ってマップさせることさえできました。アノテーションを介して表現される条件付き結合も苦痛です。それが不可能だと言っているわけではありませんが、非常に不可解で直感的ではありません。
以下のX-Zeroに答えるために、仕様から結果に移行したいと思います。つまり、消費者は彼らが知っていることを私に話し、私は彼らの質問にその場で答えるクエリを作成します。実際には、私は彼らが渡すことができるものにいくつかの制限を設けるつもりです。