将SQL查询转换为Hibernate查询

4

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

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

现在我需要将这个查询改为Hibernate。我查了一下,但没找到答案。有人能帮忙吗?

2个回答

2
随机函数在每个底层数据库之间都不同,不是SQL92的标准部分。因此,您需要针对使用的数据库类型实现一个SQLDialect。
例如:

创建PostgresSQLDialect类,继承org.hibernate.dialect.PostgreSQLDialect

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

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

hibernate {
    dialect='com.mycompany.sql.PostgresSQLDialect'
}

1
根据这个帖子,你可以这样做:
String query = "from QUESTION order by newid()";
Query q = session.createQuery(query);
q.setMaxResults(10);

不确定它是否有效(特别是随机部分),但你可以试试 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接