SABSSlidingScaleRepositoryImpl.java
/*
* To change this template, choose Tools | Templates and open the template in
* the editor.
*/
package com.tradecloud.repository.sabs;
import com.tradecloud.domain.base.utils.ObjectUtil;
import com.tradecloud.domain.sabs.SABSSlidingScale;
import com.tradecloud.domain.sabs.SABSSlidingScaleSearch;
import com.tradecloud.repository.SearchMetaParams;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
import com.tradecloud.repository.impl.ConsignmentRepositoryImpl;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* Implement SABSSlidingScale search functionality.
*/
@Repository(value = "sabsSlidingScaleRepository")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class SABSSlidingScaleRepositoryImpl extends RepositoryBaseImpl<SABSSlidingScale, SABSSlidingScaleSearch>
implements SABSSlidingScaleRepository {
private static Logger log = Logger.getLogger(ConsignmentRepositoryImpl.class);
private static final long serialVersionUID = 1L;
private final static String DESCRIPTION = "sabsSlidingScaleDescription";
private final static String EFFECTIVE_DATE = "effectiveDate";
private final static String CREATED = "created";
@Override
public SABSSlidingScale findById(long id) {
List<SABSSlidingScale> sabsSlidingScales = (List<SABSSlidingScale>) findByNamedQueryAndNamedParam("findSABSSlidingScaleById",
"id", id);
return ObjectUtil.first(sabsSlidingScales);
}
@Override
public List<SABSSlidingScale> search(SABSSlidingScaleSearch search) {
log.debug("Search. " + search);
DetachedCriteria searchCriteria = DetachedCriteria.forClass(getPersistentClass(), "sabsslidingscale");
if (search.getDescription() != null) {
searchCriteria.add(Restrictions.like(DESCRIPTION, search.getDescription()));
}
if (search.getCurrency() != null) {
// search the currency of the child Orders
// inner join with orders
searchCriteria.createAlias("consignment.orders", "orders");
searchCriteria.add(Restrictions.eq("orders.currency", search.getCurrency()));
// ensure distinct results, no duplicates when joining to Orders
// table that can have multiple results for each Consignment
//searchCriteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
}
if (search.getEffectiveDateFrom() != null && search.getEffectiveDateTo() != null) {
searchCriteria.add(Restrictions.between(EFFECTIVE_DATE, search.getEffectiveDateFrom(),
search.getEffectiveDateTo()));
}
searchCriteria.addOrder(Order.desc(CREATED));
// ensure distinct results, no duplicates when joining to Orders
// table that can have multiple results for each Consignment
searchCriteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
SearchMetaParams metaParams = new SearchMetaParams(0, 10, CREATED, false);
search.setSearchMetaParams(metaParams);
List<SABSSlidingScale> consignmentList = getExecutableCriteriaList(searchCriteria, search.getSearchMetaParams());
return consignmentList;
}
@Override
public SABSSlidingScale findByDescription(String sabsSlidingScaleDescription) {
Criteria searchCriteria = getSessionCustom().createCriteria(SABSSlidingScale.class);
searchCriteria.add(Restrictions.like(DESCRIPTION, sabsSlidingScaleDescription));
return (SABSSlidingScale) searchCriteria.uniqueResult();
}
/**
* Method performs a full search (no duplicates) without page filtering/pagination, ie: row count or index start.
*
* @param search
* @return
*/
public List<SABSSlidingScale> fullSearch(SABSSlidingScaleSearch search) {
log.debug("Search. " + search);
DetachedCriteria searchCriteria = DetachedCriteria.forClass(getPersistentClass(), "consignment");
if (search.getDescription() != null) {
searchCriteria.add(Restrictions.like(DESCRIPTION, search.getDescription()));
}
if (search.getCurrency() != null) {
// search the currency of the child Orders
// inner join with orders
searchCriteria.createAlias("consignment.orders", "orders");
searchCriteria.add(Restrictions.eq("orders.currency", search.getCurrency()));
}
if (search.getEffectiveDateFrom() != null && search.getEffectiveDateTo() != null) {
searchCriteria.add(Restrictions.between(EFFECTIVE_DATE, search.getEffectiveDateFrom(),
search.getEffectiveDateTo()));
}
searchCriteria.addOrder(Order.desc(CREATED));
// ensure distinct results, no duplicates when joining to Orders
// table that can have multiple results for each Consignment
// below line of code has been moved from currency search block to ensure unique results
searchCriteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
return getExecutableCriteriaList(searchCriteria, null);
}
}