【发布时间】:2010-09-24 22:23:07
【问题描述】:
我有一个 MySQL 查询,用于从表中检索随机行。查询是:
SELECT * FROM QUESTION WHERE TESTID=1 ORDER BY RAND() LIMIT 10;
现在我需要将此查询更改为 Hibernate。做了一些谷歌搜索,但找不到答案。有人可以提供帮助吗?
【问题讨论】:
标签: sql hibernate grails jdbc groovy
我有一个 MySQL 查询,用于从表中检索随机行。查询是:
SELECT * FROM QUESTION WHERE TESTID=1 ORDER BY RAND() LIMIT 10;
现在我需要将此查询更改为 Hibernate。做了一些谷歌搜索,但找不到答案。有人可以提供帮助吗?
【问题讨论】:
标签: sql hibernate grails jdbc groovy
根据这个post,你可以这样做:
String query = "from QUESTION order by newid()";
Query q = session.createQuery(query);
q.setMaxResults(10);
不确定它是否会起作用(尤其是随机部分),但你可以试试 :)
【讨论】:
随机函数在每个底层数据库之间是不同的,不是 SQL92 的标准部分。
鉴于您需要为正在使用的给定数据库类型实现 SQLDialect。
例如:
类 PostgresSQLDialect 扩展 org.hibernate.dialect.PostgreSQLDialect { PostgresSQLDialect() { 极好的() registerFunction("rand", new NoArgSQLFunction("random", Hibernate.DOUBLE)); } }然后你需要在配置中定义那个方言
休眠{ dialect='com.mycompany.sql.PostgresSQLDialect' }【讨论】: