IntegratedShipmentRepositoryImpl.java

package com.tradecloud.repository.export.shipment.impl;

import com.tradecloud.domain.integration.IntegratedShipment;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
import com.tradecloud.repository.export.shipment.IntegratedShipmentRepository;
import org.hibernate.query.NativeQuery;
import org.hibernate.query.Query;
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;

@Repository(value = "integratedShipmentRepository")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class IntegratedShipmentRepositoryImpl extends RepositoryBaseImpl<IntegratedShipment, Object> implements IntegratedShipmentRepository {

    @Override
    public List<IntegratedShipment> findAllSortedById() {
        return (List<IntegratedShipment>) getNamedQuery("findAllIntegratedShipmentSortedById");
    }

    @Override
    public IntegratedShipment findOldest(List<String> exclude) {
        StringBuilder queryString = new StringBuilder("from IntegratedShipment ish ");
        if (exclude != null && !exclude.isEmpty())
            queryString.append("where ish.reference not in (:exclude) ");
        queryString.append("order by ish.id");

        Query query = getSession().createQuery(queryString.toString());
        if (exclude != null && !exclude.isEmpty())
            query.setParameter("exclude", exclude);
        query.setMaxResults(1);
        return (IntegratedShipment) query.uniqueResult();
    }

    @Override
    public List<String> findAllUsers() {
        NativeQuery nativeQuery = getSession().createNativeQuery("select username from IntegratedShipment");
        return nativeQuery.list();
    }
}