Hi, no idea but feel free to work on a patch for an upcoming version!
Am Mi., 27. März 2019 um 16:19 Uhr schrieb Frank Martínez < [email protected]>: > Hi Guys, > I am trying to set the order of a query using an Expression, but > creiteria.orderAsc only supports SingularAttribute. > > The use case is very simple: > > 1. I have a field in a legacy database, the field type is VARCHAR > 2. The field only contains numbers, some of them with leading zeros. > 3. I need to sort by that field > 4. Because the field is VARCHAR, order is Alphanum, but I need to sort it > numerically > 5. The native SQL solution is obvious (convert to int): > ORDER BY myfunction(e.account_ident_) > > 6. I am using CriteriaSupport to create the query (complex conditions, > joins, etc...) > > 7. The sort part of the code is: > > public List<AccountEntity> search(DefaultAccountFilter filter) { > return searchCriteria(filter) > .orderAsc(AccountEntity_.accountIdent) > .orderAsc(AccountEntity_.name) > .orderDesc(AccountEntity_.id) > .createQuery() > .setFirstResult(filter.getPageStart()) > .setMaxResults(filter.getPageSize()) > .getResultList(); > } > > As you can see, the problematic part is: > > .orderAsc(AccountEntity_.accountIdent) > > How can I do something similar to: > > CriteriaBuilder cb = ... > .orderAsc( cb.function("myfunction", > Integer.class, AccountEntity_.accountIdent) ) > > orderAsc/Desc only receives SingularAttribute, a future enhancement could > be to overload to receive Expression too. > > Do you know any workaround I can do with the current version 1.9.0? > > Thanks, > > Frank. > > -- > Frank D. Martínez M. >
