如何在Hibernate条件api查询中添加优化程序提示

时间:2014-12-03 12:03:44

标签: java sql hibernate criteria

我正在使用Hibernate 4.3.7 / jpa 2,我注意到来自hibernate 4.3 我可以将Oracle查询提示嵌入到hibernate查询中抛出addQueryHint,我试图使用api和hql这两个标准修复它,但不幸的是它对我不起作用!!

有没有办法改变这种方式?这是我的代码

public ListgetAll(){

    Session session = em.unwrap(org.hibernate.Session.class);
      Criteria criteria = session.createCriteria(Person.class).add(Restrictions.like("surname", "H%"));
      criteria.addQueryHint("ALL_ROWS");
      return criteria.list();

}

任何回复都将受到高度赞赏

谢谢

1 个答案:

答案 0 :(得分:2)

我对addQueryHint没有任何好运。根据文档,它应该通过提示,但当我看到SQL发送它不存在。我注意到这个功能的测试是使用Oracle方言,我们使用的是SQL Server,所以我认为它可能没有在SQL Server中实现,但我看到你有这个Oracle中的问题。

以下是文档中的说明:

  

向SQL添加数据库查询提示。这些与JPA的QueryHint不同,后者特定于JPA实现,并忽略了DB供应商特定的提示。相反,这些仅用于特定于供应商的提示,例如Oracle的优化程序。支持多个查询提示;方言将决定连接和放置。

无论如何,我发现了一个非常糟糕的黑客/解决方法,但我很乐意看到addQueryHint已修复。

.add(Restrictions.sqlRestriction("1=1 ADD_YOUR_HINT_HERE")))