Я пытаюсь использовать подсказку Oracle в Hibernate для вызова индекса силы, но не нашел подходящего API в Hibernate 3.6.10.Final.

Я как-то пробовал с проекциями в критериях 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

Я обнаружил, что проекция добавляет , после подсказки запроса.

Есть ли другой способ использовать подсказку запроса Oracle в критериях Hibernate 3.6.10 или в HQL?

Благодарность

3
Santosh 31 Дек 2015 в 13:30

2 ответа

Лучший ответ

Вы должны сначала попробовать поискать. Вот простой трюк, чтобы решите эту проблему, просто преобразуйте подсказку в столбец:

"/*+ INDEX_DESC(CONTACT_USER_FK_I) */ 1 as MYHINT"
4
Community 23 Май 2017 в 12:34

Ваша проблема в том, что нет ничего предшествующего ,. Поскольку вы хотите добавить проекцию на атрибут objectId, вы можете преобразовать свои критерии в следующее:

Projections.sqlProjection("/*+ INDEX_DESC(CONTACT_USER_FK_I) */ objectId", new String[]{}, new Type[]{}))
1
malaguna 31 Дек 2015 в 10:49