У меня была та же проблема и критерии api orderBy метод не будет работать с объединенными столбцами. Мне нужно было это использовать с методом attributeBuilder.construct (). Я решил это, расширив класс Orale10gDialect и зарегистрировав пользовательскую функцию:
import org.hibernate.dialect.Oracle10gDialect;
import org.hibernate.dialect.function.SQLFunctionTemplate;
import org.hibernate.type.StandardBasicTypes;
public class CustomOracle10gDialect extends Oracle10gDialect {
public CustomOracle10gDialect() {
super();
// This must be used due to bug in Hibernate (orderBy won't work with concat)
registerFunction("concatwithspace", new SQLFunctionTemplate(StandardBasicTypes.STRING, "?1 || ' ' || ?2"));
}
}
А потом:
Expression<String> user = cb.function("concatwithspace", String.class, criteriaRoot.get("firstname"), criteriaRoot.get("lastname"));
...
criteriaQuery.orderBy(cb.asc(user));
Конечно, вы также должны выбрать эти объединенные столбцы.