package org.hibernate.examples.hibernate.tools;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.examples.hibernate.HibernateParameter;
import org.hibernate.examples.utils.Serializers;
import org.hibernate.internal.CriteriaImpl;
import org.springframework.data.domain.Pageable;
/**
* Hibernate 용 Helper class
*
* @author 배성혁 sunghyouk.bae@gmail.com
* @since 2013. 12. 4. 오후 11:16
*/
public final class HibernateTool {
public static DetachedCriteria copyDetachedCriteria(DetachedCriteria src) {
return Serializers.copyObject(src);
}
public static Criteria copyCriteria(Criteria src) {
return (CriteriaImpl) Serializers.copyObject((CriteriaImpl) src);
}
public static Criteria getExecutableCriteria(Session session, DetachedCriteria dc) {
return dc.getExecutableCriteria(session);
}
public static Criteria getExecutableCriteria(DetachedCriteria dc, Session session, Order... orders) {
Criteria criteria = getExecutableCriteria(session, dc);
for (Order o : orders) {
criteria.addOrder(o);
}
return criteria;
}
public static Criteria getExecutableCriteria(DetachedCriteria dc, Session session, Iterable<Order> orders) {
Criteria criteria = getExecutableCriteria(session, dc);
for (Order o : orders) {
criteria.addOrder(o);
}
return criteria;
}
public static DetachedCriteria addOrders(DetachedCriteria dc, Order... orders) {
for (Order o : orders) {
dc.addOrder(o);
}
return dc;
}
public static DetachedCriteria addOrders(DetachedCriteria dc, Iterable<Order> orders) {
for (Order o : orders) {
dc.addOrder(o);
}
return dc;
}
public static Criteria addOrders(Criteria criteria, Order... orders) {
for (Order o : orders) {
criteria.addOrder(o);
}
return criteria;
}
public static Criteria addOrders(Criteria criteria, Iterable<Order> orders) {
for (Order o : orders) {
criteria.addOrder(o);
}
return criteria;
}
public static Query setParameters(Query query, HibernateParameter... parameters) {
for (HibernateParameter p : parameters) {
query.setParameter(p.getName(), p.getValue());
}
return query;
}
public static Query setParameters(Query query, Iterable<HibernateParameter> parameters) {
for (HibernateParameter p : parameters) {
query.setParameter(p.getName(), p.getValue());
}
return query;
}
public static Criteria setPaging(Criteria criteria, Pageable pageable) {
return setPaging(criteria, pageable.getPageNumber() * pageable.getPageSize(), pageable.getPageSize());
}
public static Criteria setPaging(Criteria criteria, int firstResult, int maxResults) {
if (firstResult >= 0)
criteria.setFirstResult(firstResult);
if (maxResults > 0)
criteria.setMaxResults(maxResults);
return criteria;
}
public static Query setPaging(Query query, Pageable pageable) {
return setPaging(query, pageable.getPageNumber() * pageable.getPageSize(), pageable.getPageSize());
}
public static Query setPaging(Query query, int firstResult, int maxResults) {
if (firstResult >= 0)
query.setFirstResult(firstResult);
if (maxResults > 0)
query.setMaxResults(maxResults);
return query;
}
}