I have an Oracle XMLType column that stores the various language specific strings. I need to construct a Hibernate criteria that orders on this column. In order to do this, I need to extract the value with an Oracle function. This criteria is generated automatically by code I have written but I cannot, for the life of me, figure out how to extract the value and order on it via the criteria API. Basically, the generated SQL should look something like:
SELECT EXTRACTVALUE(title, '//value[@lang="EN"]') AS enTitle
FROM domain_object
ORDER BY enTitle
I fiddled with projections momentarily, but they appear to execute a second select. Which I assume would cause hibernate to select ALL values and in memory sort them based on the projection? This would be very undesirable =\
Ok, I found a solution. Not sure this is the best, so I will leave it open for a little while if some one wants to provide a better answer / refine my solution.
What I did was extend
org.hibernate.criterion.Orderthusly:Then it was just a matter of saying
criteria.addOrder(LocalStringOrder.asc('prop')).