package com.megatim.fdxconsultation.dao.ifaces.abstracts;
|
|
import com.megatim.fdxcommons.model.pojo.CriteriaEntityFromView;
|
import com.megatim.fdxcommons.tools.database.tables.dto.JpqlQueryElement;
|
import com.megatim.fdxcommons.model.pojo.OrderByDefinition;
|
import com.megatim.fdxcommons.tools.database.queries.metadata.QueryParam;
|
import com.megatim.fdxcommons.tools.database.queries.metadata.jpql.JpqlQueryParam;
|
import com.megatim.fdxcommons.tools.database.tables.JpqlTable;
|
import java.util.List;
|
import javax.persistence.EntityGraph;
|
import javax.persistence.EntityManager;
|
import javax.persistence.Query;
|
|
/**
|
*
|
* @author ASUS
|
*/
|
public interface PaginationWithCriteriaEntityDAO<T, ID> {
|
|
public Class<T> getManagedEntityClass();
|
|
public EntityManager getEntityManager();
|
|
public default long count(CriteriaEntityFromView criterion) throws Exception {
|
JpqlQueryElement jpqlQueryElt = new JpqlTable(criterion, getManagedEntityClass()).countQuery();
|
Query query = getEntityManager().createQuery(jpqlQueryElt.getQuery());
|
setRealParams(query, jpqlQueryElt.getParameters());
|
|
return (long) query.getSingleResult();
|
}
|
|
public default List<T> findWithPagination(CriteriaEntityFromView criterion, List<String> fetchEagerFields, List<OrderByDefinition> orderByFields, Integer pageNumber, Integer pageSize) throws Exception {
|
EntityGraph<T> entityGraph = getEntityManager().createEntityGraph(getManagedEntityClass());
|
fetchEagerFields.stream().forEach(f -> entityGraph.addAttributeNodes(f));
|
JpqlQueryElement jpqlQueryElt = new JpqlTable(criterion, getManagedEntityClass()).selectQuery(orderByFields);
|
System.out.println("findWithPagination---------------" + jpqlQueryElt.getQuery() + "--------------");
|
Query query = getEntityManager().createQuery(jpqlQueryElt.getQuery());
|
setRealParams(query, jpqlQueryElt.getParameters());
|
query.setHint("javax.persistence.loadgraph", entityGraph);
|
query.setFirstResult((pageNumber - 1) * pageSize);
|
query.setMaxResults(pageSize);
|
return query.getResultList();
|
}
|
|
public default List<T> findAll(CriteriaEntityFromView criterion, List<String> fetchEagerFields, List<OrderByDefinition> orderByFields) throws Exception {
|
EntityGraph<T> entityGraph = getEntityManager().createEntityGraph(getManagedEntityClass());
|
fetchEagerFields.stream().forEach(f -> entityGraph.addAttributeNodes(f));
|
JpqlQueryElement jpqlQueryElt = new JpqlTable(criterion, getManagedEntityClass()).selectQuery(orderByFields);
|
System.out.println("findAll---------------" + jpqlQueryElt.getQuery() + "--------------");
|
Query query = getEntityManager().createQuery(jpqlQueryElt.getQuery());
|
setRealParams(query, jpqlQueryElt.getParameters());
|
query.setHint("javax.persistence.loadgraph", entityGraph);
|
return query.getResultList();
|
}
|
|
public default void setRealParams(Query query, List<JpqlQueryParam> params) {
|
int index = 1;
|
for (JpqlQueryParam p : params) {
|
query.setParameter(index, p.getParamValue());
|
index++;
|
}
|
}
|
|
|
}
|