2008-12-02 4 views
4

У меня есть запрос MySQL, который я использую для извлечения случайных строк из таблицы. Запрос:Запрос SQl для спящего режима

SELECT * FROM QUESTION WHERE TESTID=1 ORDER BY RAND() LIMIT 10; 

Теперь мне нужно изменить этот запрос Hibernate. Немного искал, но не смог найти ответ. Может ли кто-нибудь помочь в этом?

ответ

1

Согласно этому post, вы можете сделать это:

String query = "from QUESTION order by newid()"; 
Query q = session.createQuery(query); 
q.setMaxResults(10); 

Не уверен, что если он будет работать (особенно для случайной части), но вы можете попробовать это :)

2

случайная функция между каждой базовой БД и не является стандартной частью SQL92.

Учитывая, что вам необходимо реализовать SQLDialect для данного типа базы данных, которую вы используете.

например:

 
class PostgresSQLDialect extends org.hibernate.dialect.PostgreSQLDialect { 
    PostgresSQLDialect() { 
     super() 
     registerFunction("rand", new NoArgSQLFunction("random", Hibernate.DOUBLE)); 
    } 
}

Затем вам нужно будет определить, что диалект в конфигурации

 
hibernate { 
    dialect='com.mycompany.sql.PostgresSQLDialect' 
} 
Смежные вопросы