如何在 Hibernate 中使用 Oracle 查询提示
How to use Oracle query hint in Hibernate
我试图在 Hibernate 中使用 Oracle 提示来调用强制索引,但在 Hibernate 3.6 中没有找到合适的API。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
我发现投影在查询提示后附加了一个 ,
。
是否有任何其他方法可以在 Hibernate 3.6.10 条件或 HQL 中使用 Oracle 查询提示?
谢谢
您应该先尝试搜索。 Here 是解决此问题的一个简单技巧,只需 将提示 转换为一列即可:
"/*+ INDEX_DESC(CONTACT_USER_FK_I) */ 1 as MYHINT"
您的问题是 ,
之前没有任何内容。由于您想在 objectId
属性上添加投影,您可以将您的条件转换为如下内容:
Projections.sqlProjection("/*+ INDEX_DESC(CONTACT_USER_FK_I) */ objectId", new String[]{}, new Type[]{}))
我试图在 Hibernate 中使用 Oracle 提示来调用强制索引,但在 Hibernate 3.6 中没有找到合适的API。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
我发现投影在查询提示后附加了一个 ,
。
是否有任何其他方法可以在 Hibernate 3.6.10 条件或 HQL 中使用 Oracle 查询提示?
谢谢
您应该先尝试搜索。 Here 是解决此问题的一个简单技巧,只需 将提示 转换为一列即可:
"/*+ INDEX_DESC(CONTACT_USER_FK_I) */ 1 as MYHINT"
您的问题是 ,
之前没有任何内容。由于您想在 objectId
属性上添加投影,您可以将您的条件转换为如下内容:
Projections.sqlProjection("/*+ INDEX_DESC(CONTACT_USER_FK_I) */ objectId", new String[]{}, new Type[]{}))