Package com.jdroid.javaweb.hibernate

Source Code of com.jdroid.javaweb.hibernate.MySQLHibernateRepository

package com.jdroid.javaweb.hibernate;

import java.util.List;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import com.jdroid.java.repository.RandomRepository;
import com.jdroid.java.search.PagedResult;
import com.jdroid.javaweb.domain.Entity;
import com.jdroid.javaweb.search.Pager;
import com.jdroid.javaweb.search.Sorting;

/**
* Hibernate Repository with additional implementation that works on MySQL engine only.
*
* @param <T> The {@link Entity}
*/
public abstract class MySQLHibernateRepository<T extends Entity> extends AbstractHibernateRepository<T> implements
    RandomRepository<T> {
 
  /**
   * @param entityClass
   */
  public MySQLHibernateRepository(Class<T> entityClass) {
    super(entityClass);
  }
 
  /**
   * @see com.jdroid.java.repository.RandomRepository#getRandomList(java.lang.Integer)
   */
  @Override
  public List<T> getRandomList(Integer maxResults) {
    return findRandomList(createDetachedCriteria(), maxResults);
  }
 
  /**
   * @see com.jdroid.java.repository.RandomRepository#getRandomIds(java.lang.Integer)
   */
  @SuppressWarnings("unchecked")
  @Override
  public List<Long> getRandomIds(Integer maxResults) {
    DetachedCriteria criteria = this.createDetachedCriteria();
    criteria.setProjection(Projections.id());
    criteria.add(getRandomRestriction());
    return this.getHibernateTemplate().findByCriteria(criteria, 0, maxResults);
  }
 
  /**
   * Find random results that fulfill the given criteria.
   *
   * @param criteria The {@link DetachedCriteria} to fulfill.
   * @param maxResults Maximum quantity of results to find.
   * @return The random list.
   */
  protected List<T> findRandomList(DetachedCriteria criteria, Integer maxResults) {
    criteria.add(getRandomRestriction());
    return find(criteria, maxResults);
  }
 
  protected PagedResult<T> findRandom(DetachedCriteria detachedCriteria, Pager pager, Sorting sorting) {
    detachedCriteria.add(getRandomRestriction());
    return find(detachedCriteria, pager, sorting);
  }
 
  /**
   * @see com.jdroid.java.repository.RandomRepository#getRandom()
   */
  @Override
  public T getRandom() {
    return getRandom(createDetachedCriteria());
  }
 
  /**
   * Find a random result that fulfill the given criteria.
   *
   * @param criteria The {@link DetachedCriteria} to fulfill.
   * @return The random result.
   */
  protected T getRandom(DetachedCriteria criteria) {
    criteria.add(getRandomRestriction());
    return findUnique(criteria);
  }
 
  /**
   * @return Criterion to get a random row
   */
  protected Criterion getRandomRestriction() {
    return Restrictions.sqlRestriction("1=1 order by rand()");
  }
}
TOP

Related Classes of com.jdroid.javaweb.hibernate.MySQLHibernateRepository

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.