SQl Query to Hibernate Query - PullRequest
       36

SQl Query to Hibernate Query

4 голосов
/ 02 декабря 2008

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

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

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

Ответы [ 2 ]

2 голосов
/ 02 декабря 2008

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

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

например:

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

Тогда вам нужно будет определить этот диалект в конфиге

hibernate {
    dialect='com.mycompany.sql.PostgresSQLDialect'
}
1 голос
/ 02 декабря 2008

Согласно этому сообщению , вы можете сделать это:

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

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

...