【问题标题】:How to use Oracle query hint in Hibernate如何在 Hibernate 中使用 Oracle 查询提示
【发布时间】:2016-04-05 08:11:38
【问题描述】:

我正在尝试在 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 查询提示吗?

谢谢

【问题讨论】:

  • 有没有其他方法可以使用 Oracle 提示而不是在代码中硬编码索引,比如我们可以从休眠属性文件中实现它。

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


【解决方案1】:

您的问题是, 之前没有任何内容。由于您想在objectIdattribute 上添加投影,您可以将您的标准转换为如下所示:

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

【讨论】:

  • 谢谢我的问题,有没有其他方法可以使用 Oracle 提示而不是在代码中硬编码索引,比如我们可以从休眠属性文件中实现它
【解决方案2】:

您应该先尝试搜索。 Here 是解决这个问题的一个简单技巧,只需将提示转换为一列:

"/*+ INDEX_DESC(CONTACT_USER_FK_I) */ 1 as MYHINT"

【讨论】:

  • 非常感谢您的快速响应,这解决了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
  • 2012-05-17
  • 1970-01-01
  • 2016-12-18
相关资源
最近更新 更多