是否有Hibernate的HQL版本的Restrictions.sqlRestriction()?

时间:2015-12-02 23:05:21

标签: java hibernate hql hibernate-criteria

我有一个使用Hibernate 4.3.6的Java应用程序。我们使用两个不同的数据库(一个用于常规部署,另一个用于单元/集成测试)。我们希望使用一个常见的数据库功能,但在每个数据库方言中它被称为不同,而Hibernate不支持它。我们通过简单地为每个Dialect创建子类并使用:

来解决这个问题
this.registerFunction("normalizedFunctionName",
   new SQLFunctionTemplate(StandardBasicTypes.INTEGER, "arbitraryFunctionName(?1, ?2)"));

我现在可以在HQL中使用normalizedFunctionName(?, ?)。但是,我想在使用Criteria API时使用它,例如:

sessionFactory.getCurrentSession()
  .createCriteria(SomeClass.class)
  .add(
     Restrictions.lt("normalizedFunctionName(value, 'bla')", 3)
  );

但这不起作用。现在我发现了那里:

Restrictions.sqlRestriction("arbitraryFunctionName(value, 'bla') < 3");

但既然是原生SQL而不是HQL,我就无法使用它。

所以,我的问题是:

  • 是否有Restrictions.sqlRestriction()功能的HQL版本?
  • 还是有其他选择来完成我想要做的事情吗?

0 个答案:

没有答案