Hibernate Criteria API: get n random rows

前端 未结 5 1803
被撕碎了的回忆
被撕碎了的回忆 2020-12-03 11:06

I can\'t figure out how to fetch n random rows from a criteria instance:

Criteria criteria = session.createCriteria(Table.class);
criteria.add(Restrictions.e         


        
5条回答
  •  一生所求
    2020-12-03 11:34

    The answer by @PSV Bhat is difficult if you are dynamically generating your Criteria. Here is a solution that extends hibernate Order class:

    import org.hibernate.Criteria;
    import org.hibernate.criterion.Order;
    
    private void addOrderByToCriteria(Criteria criteria) {
        criteria.addOrder(Order.asc("foobar"));
        criteria.addOrder(ORDER_RANDOM);
    }
    
    private static final OrderRandom ORDER_RANDOM = new OrderRandom();
    
    private static class OrderRandom extends Order {
        public OrderRandom() {
            super("", false);
        }
        @Override
        public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) {
            return "RANDOM()"; // or RAND() or whatever this is in your dialect
        }
    }
    

提交回复
热议问题