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