4

我有一个 MySQL 查询,用于从表中检索随机行。查询是:

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

现在我需要将此查询更改为Hibernate。做了一些谷歌搜索,但找不到答案。有人可以提供帮助吗?

4

2 回答 2

2

random 函数在每个底层 DB 之间是不同的,并且不是 SQL92 的标准部分。

鉴于您需要为正在使用的给定数据库类型实现 SQLDialect。

例如:

类 PostgresSQLDialect 扩展 org.hibernate.dialect.PostgreSQLDialect {
    PostgresSQLDialect() {
        极好的()
        registerFunction("rand", new NoArgSQLFunction("random", Hibernate.DOUBLE));
    }
}

然后您需要在配置中定义该方言

休眠{
    dialect='com.mycompany.sql.PostgresSQLDialect'
}
于 2008-12-02T14:51:07.103 回答
1

根据这篇文章,你可以这样做:

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

不确定它是否会起作用(尤其是随机部分),但您可以尝试一下:)

于 2008-12-02T12:54:12.160 回答