如何在Hibernate中使用Oracle查询提示

时间:2015-12-31 10:30:42

标签: oracle hibernate orm hibernate-mapping hibernate-criteria

我试图在Hibernate中使用Oracle提示调用强制索引,但在Hibernate 3.6.10.Final中找不到任何适当的API。

我以某种方式尝试了Hibernate标准中的预测:

proList.add(Projections.sqlProjection("/*+ INDEX_DESC(CONTACT_USER_FK_I) */", new String[]{}, new Type[]{}));
                proList.add(Projections.property("objectId"));
                criteria.setProjection(proList);
                return criteria.list();

但我得到以下例外:

    EXCEPTION
Caused by: 8 SQL Error  (could not execute query; SQL [select /*+ INDEX_DESC(CONTACT_USER_FK_I) */, this_.CONTACT_ID as y0_ from R4GDEV01_MBW.CONTACT this_ w
here this_.USER_ID=? and this_.ADDRESS_BOOK_ID in (?) and this_.DELETION_DATE is null order by lower(this_.FIRSTNAME) asc]; nested exception is org.hibernate
.exception.SQLGrammarException: could not execute query)
        at com.fusionone.pml.dao.hibernate.AbstractDao.executeCallback(AbstractDao.java:391)
        at com.fusionone.pml.dao.hibernate.AbstractContactDao.searchContacts(AbstractContactDao.java:1019)
        at com.fusionone.nab.core.service.impl.MergeServiceImpl.getFilteredContactIds(MergeServiceImpl.java:154)
        ... 91 more

我发现投影在查询提示后附加,

在Hibernate 3.6.10标准或HQL中是否有其他方法可以使用Oracle查询提示?

由于

2 个答案:

答案 0 :(得分:3)

您应该先尝试搜索。 Here是解决此问题的简单方法,只需提示转换为列:

StreamReader

答案 1 :(得分:1)

您的问题是,之前没有任何内容。由于您要在objectId属性上添加投影,您可以将您的条件转换为这样的somenthing:

Projections.sqlProjection("/*+ INDEX_DESC(CONTACT_USER_FK_I) */ objectId", new String[]{}, new Type[]{}))