1

不動産広告用の 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 クエリを使用することをお勧めします。私はどんなアイデアにもオープンです。

注:順序が異なるだけですべてのレコードを選択していることはわかっています。結果セットを制限することが次のステップになります。

4

2 に答える 2

1

あなたは自分の問題をほとんど解決したと思います。

レコードの数を取得します

Integer singleResult = em.createQuery("SELECT count(r) FROM RealEstate r", Integer.class).getSingleResult();

次に、それから乱数を作成し、最後に

    Random random = new Random();

        RealEstate RealEstate = em.createQuery("SELECT r FROM RealEstate r", RealEstate.class)
            .setFirstResult(random.nextInt(size))
            .setMaxResults(1) 
            .getSingleResult();
于 2012-10-18T05:31:35.910 に答える