VatRateRepositoryImpl.java

package com.tradecloud.repository.rate.impl;

import com.tradecloud.domain.Vat;
import com.tradecloud.domain.infrastructure.persistence.CriteriaBuilder;
import com.tradecloud.dto.rate.VatSearch;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
import com.tradecloud.repository.rate.VatRateRepository;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * Created by ds on 2017/06/19.
 */
@Repository(value = "vatRateRepository")
public class VatRateRepositoryImpl extends RepositoryBaseImpl<Vat, VatSearch> implements VatRateRepository {

    @Override
    public Vat findVatRateByClosestEffectiveDate(Date currentDate) {
        DetachedCriteria criteria = DetachedCriteria.forClass(Vat.class);
        CriteriaBuilder.addDateLessOrEqualRangeCriteria(criteria, "effectiveDate", currentDate);
        criteria.addOrder(Order.desc("effectiveDate")).addOrder(Order.asc("id"));

        List<Vat> vatRateList = getExecutableCriteriaList(criteria, null);
        return (vatRateList.isEmpty() ? null : vatRateList.get(0));
    }
}