Я хочу использовать проекцию стандартного отклонения в запросе, который я создаю с использованием 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, но затем я не уверен, как использовать функцию hsql в запросе, созданном с использованием API Criteria.
Любая помощь будет очень кстати.
Спасибо