2012-10-17 3 views
1

광고 부동산을위한 웹 애플리케이션을 개발 중입니다. 검색 페이지에서 임의의 광고를 보여주고 싶지만 지금까지는 데이터베이스에서 임의의 레코드를 선택해도 성공하지 못했습니다. 이 콘솔에서 일했다,하지만 난 정말 EJB를 QL에 넣어 없습니다 :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(); 

작동하려면 : 무작위 매개 변수가 있지만 예외가 있어요. 나는 NativeQuery

Query q = em.createNativeQuery("SELECT * FROM RealEstate ORDER BY RANDOM()"); 
List<RealEstate> resL = q.getResultList(); 

으로 문제를 해결하려하지만 난이 웹 페이지에 광고를 표시하려고 할 때 필드에 문제가 있었다. RealEstates가 아닌 결과 목록에 개체가 있기 때문에 추측합니다. 조인 된 상속을 사용합니다. 네이티브 질의 사용을 방해하는지는 모르지만 ejb ql 쿼리를 사용하는 것을 선호합니다. 나는 어떤 아이디어라도 열어.

참고 : 모든 레코드를 선택하는 것은 순서가 다르다는 것을 알고 있으므로 결과 집합을 제한하면 다음 단계가됩니다.

답변

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(); 
+0

좋은 자습서를 javatpoint하기 당신이 한 것처럼 setMaxResult를 추가하면 매력처럼 작동합니다. 그래서 고마워요. – Peter

+0

다행 이네요. –

0

은 내가 임의의 데이터이 뭔가를 할 것입니다

SELECT column FROM table 
ORDER BY RAND() 
(210)

감사는 첫 번째 쿼리가 긴 반환하고 그래서 난 다시 nativequery를 사용하여 시도 정수로 캐스팅 할 수없는 말을하지만, 예상 된 결과의 클래스를 제공하는 예외가 발생했습니다

javatpoint take a look at here