使用DBMS_RANDOM.value时出现Hibernate错误

时间:2014-03-06 01:24:08

标签: oracle hibernate oracle11g

我想使用Hibernate SQL获得与下面查询相同的结果,即,我想从ID不等于300的表中获取两个随机记录。我使用的是Hibernate 4.1和Oracle 11g。我在Toad上运行了以下查询,它提供了2个随机记录。但是,当我尝试运行HQL时,使用“DBMS_RANDOM.value”时会出错。

SELECT * FROM
( SELECT *
FROM   table
where ID != '300'
AND q_ID=125
ORDER BY DBMS_RANDOM.value
)WHERE rownum < 3

我尝试创建条件和查询,但都给出了Hibernate错误:

Hibernate消息:无效路径:'DBMS_RANDOM.RANDOM'[来自com.model.table选项卡,其中tab.ID!='33092'ORDER BY DBMS_RANDOM.RANDOM]

我的实际hibernate查询是:

查询query = session.createQuery(“from table tab where tab.ID!='”+ agrmId +“'ORDER BY DBMS_RANDOM.RANDOM”)。setMaxResults(2);

我也尝试过ORDER BY rand(),这会产生Oracle错误。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我通过在hibernate映射文件中添加一个属性标记解决了这个问题:

<property name="constVal" formula="DBMS_RANDOM.RANDOM" type="long"/>

然后,在POJO类中,我添加了一个带有getter和setter方法的变量:

private long constVal;

然后,在DAO类中,我添加了以下查询:

Criteria crit1 = session.createCriteria(table.class);
crit1.add(Restrictions.ne("id",300));
crit1.add(Restrictions.eq("quesId",125));
crit1.addOrder(Order.asc("constVal"));
crit1.setMaxResults(2);

并解决了它。