Kenmegne
7 days ago 23a46b4be35277e06ec89f48730eeb694e686be8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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.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 CustomDAOWithCriteriaEntityIfaces<T, ID> {
 
    default T save(T entity) {
        return getEntityManager().merge(entity);
    }
 
    default void delete(T entity) {
        getEntityManager().remove(entity);
    }
 
    public Class<T> getManagedEntityClass();
 
    public EntityManager getEntityManager();
 
    public T getById(ID id);
 
    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("****************** query " + jpqlQueryElt.getQuery());
        Query query = getEntityManager().createQuery(jpqlQueryElt.getQuery());
        setRealParams(query, jpqlQueryElt.getParameters());
        query.setHint("javax.persistence.loadgraph", entityGraph);
 
        return query.getResultList();
    }
 
    public default long count(CriteriaEntityFromView criterion) throws Exception {
        JpqlQueryElement jpqlQueryElt = new JpqlTable(criterion, getManagedEntityClass()).countQuery();
        Query query = getEntityManager().createQuery(jpqlQueryElt.getQuery());
        System.out.println("****************** query " + 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("****************** query " + 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 void setRealParams(Query query, List<JpqlQueryParam> params) {
        int index = 1;
        for (JpqlQueryParam p : params) {
            query.setParameter(index, p.getParamValue());
            index++;
        }
    }
}