我有一个使用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版本?