Merge branch 'release/5.45.0'
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / persistence / query / RandomOrder.java
1 package eu.etaxonomy.cdm.persistence.query;
2
3 import java.util.Map;
4
5 import org.hibernate.Criteria;
6 import org.hibernate.HibernateException;
7 import org.hibernate.criterion.CriteriaQuery;
8 import org.hibernate.criterion.Order;
9 import org.hibernate.envers.query.AuditQuery;
10 import org.hibernate.internal.util.StringHelper;
11
12 import eu.etaxonomy.cdm.persistence.dao.common.OperationNotSupportedInPriorViewException;
13
14
15 public class RandomOrder extends OrderHint {
16
17 private static final long serialVersionUID = 9013839425292632385L;
18 private final static String PROPERTY_NAME = "uselessAnyways";
19
20 public RandomOrder() {
21 super(RandomOrder.PROPERTY_NAME,SortOrder.ASCENDING);
22 }
23
24 @Override
25 public void add(Criteria criteria, Map<String, Criteria> criteriaMap) {
26 criteria.addOrder(new RandomHibernateOrder());
27 }
28
29 public class RandomHibernateOrder extends Order {
30 private static final long serialVersionUID = 8231534219451938847L;
31
32
33 protected RandomHibernateOrder() {
34 super(RandomOrder.PROPERTY_NAME, true);
35 }
36
37
38 @Override
39 public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery)
40 throws HibernateException {
41 StringBuilder fragment = new StringBuilder();
42 fragment.append(" rand()");
43 return StringHelper.replace(fragment.toString(), "{alias}",
44 criteriaQuery.getSQLAlias(criteria));
45 }
46 }
47
48 @Override
49 public void add(AuditQuery query) {
50 throw new OperationNotSupportedInPriorViewException("You cannot sort in a random order in the history view");
51 }
52 }