不動産広告用の Web アプリケーションを開発しています。検索ページにランダムな広告を表示したいのですが、これまでのところ、データベースからランダムなレコードを選択することに成功していません。これはコンソールでは機能しましたが、実際には EJB QL に入れることができませんでした:
SELECT * FROM RealEstate ORDER BY RANDOM()
私が試したこと:
Random random = new Random();
Query q = em.createQuery("SELECT r FROM RealEstate r ORDER BY :random");
q.setParameter("random", random.nextInt());
return q.getResultList();
:random パラメータの代わりに数字を書いたときにうまくいくように見えましたが、これで例外が発生しました。NativeQuery で問題を解決しようとしました
Query q = em.createNativeQuery("SELECT * FROM RealEstate ORDER BY RANDOM()");
List<RealEstate> resL = q.getResultList();
しかし、ウェブページに広告を表示しようとすると、フィールドに問題がありました。結果リストにRealEstatesではなくオブジェクトがあったためだと思います。私は結合された型の継承を使用しています。ネイティブクエリの使用に干渉するかどうかはわかりませんが、ejb ql クエリを使用することをお勧めします。私はどんなアイデアにもオープンです。
注:順序が異なるだけですべてのレコードを選択していることはわかっています。結果セットを制限することが次のステップになります。