我想在我使用标准 API 构建的查询中使用标准偏差投影。我可以像这样简单地做一些事情
public class StdDevProjection extends AggregateProjection {
public StdDevProjection(String propertyName) {
super("stddev", propertyName);
}
public Type[] getTypes(Criteria criteria, CriteriaQuery criteriaQuery)
throws HibernateException {
return new Type[] { Hibernate.DOUBLE };
}
}
然后我可以将它与我的标准一起使用:
myCriteriea.setProjection(new StdDevProjection(myproperty));
那都很好。但我的问题是我使用 HSQLDB 进行任何数据库单元测试等,而我们使用 Oracle 进行部署。stddev 函数在 oracle 中完美运行,但在 HSQLDB 中不存在。HSQLDB 有 stddev_pop 和 stddev_samp 。那么有没有办法可以根据方言使用不同的功能。
我也许可以扩展 HSQL 方言以将“stddev”注册到适当的 HSQL 函数,但是我不确定如何在使用 Criteria API 构造的查询中使用 hsql 函数。
任何帮助都会很高兴。
谢谢