diff --git a/db/src/main/java/de/muehlencord/shared/db/StandardController.java b/db/src/main/java/de/muehlencord/shared/db/StandardController.java index adb573f..b7c3301 100644 --- a/db/src/main/java/de/muehlencord/shared/db/StandardController.java +++ b/db/src/main/java/de/muehlencord/shared/db/StandardController.java @@ -30,6 +30,7 @@ import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Order; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; +import org.apache.commons.lang3.ArrayUtils; /** * @@ -43,13 +44,19 @@ public class StandardController extends CommonAbstractController { return em.find(clazz, id); } + private EntityGraph getEntityGraph(Class clazz, String... subGraphItems) { + EntityGraph graph = this.em.createEntityGraph(clazz); + if (subGraphItems != null) { + for (String subGraphItem : subGraphItems) { + graph.addSubgraph(subGraphItem); + } + } + return graph; + } + @Lock(LockType.READ) public T find(Class clazz, Object id, String... subGraphItems) { - EntityGraph graph = this.em.createEntityGraph(clazz); - for (String subGraphItem : subGraphItems) { - graph.addSubgraph(subGraphItem); - } - + EntityGraph graph = getEntityGraph(clazz, subGraphItems); Map hints = new HashMap<>(); hints.put("javax.persistence.loadgraph", graph); @@ -58,12 +65,12 @@ public class StandardController extends CommonAbstractController { } @Lock(LockType.READ) - public List find(Class clazz, Map filters, List orderFields) { - return find(clazz, filters, orderFields, 0, 0); + public List find(Class clazz, Map filters, List orderFields, String... subGraphItems) { + return find(clazz, filters, orderFields, 0, 0, subGraphItems); } @Lock(LockType.READ) - public List find(Class clazz, Map filters, List orderFields, int limit, int offset) { + public List find(Class clazz, Map filters, List orderFields, int limit, int offset, String... subGraphItems) { final CriteriaBuilder cb = em.getCriteriaBuilder(); final CriteriaQuery criteria = cb.createQuery(clazz); @@ -80,16 +87,19 @@ public class StandardController extends CommonAbstractController { query.setMaxResults(limit); } + EntityGraph graph = getEntityGraph(clazz, subGraphItems); + query.setHint("javax.persistence.loadgraph", graph); + return query.getResultList(); } @Lock(LockType.READ) - public List find(Class clazz, List filters, List orderFields) throws ControllerException { + public List find(Class clazz, List filters, List orderFields, String... subGraphItems) throws ControllerException { return find(clazz, filters, orderFields, 0, 0); } @Lock(LockType.READ) - public List find(Class clazz, List filters, List orderFields, int limit, int offset) throws ControllerException { + public List find(Class clazz, List filters, List orderFields, int limit, int offset, String... subGraphItems) throws ControllerException { final CriteriaBuilder cb = em.getCriteriaBuilder(); final CriteriaQuery criteria = cb.createQuery(clazz); @@ -99,12 +109,19 @@ public class StandardController extends CommonAbstractController { criteria.where(filterCondition); } List orderList = new ArrayList<>(); - orderFields.stream().forEachOrdered(field -> orderList.add(cb.asc(r.get(field)))); + if (orderFields != null) { + orderFields.stream().forEachOrdered(field -> orderList.add(cb.asc(r.get(field)))); + } final TypedQuery query = em.createQuery(criteria.orderBy(orderList)).setFirstResult(offset); if (limit > 0) { query.setMaxResults(limit); } + if (!ArrayUtils.isEmpty(subGraphItems)) { + EntityGraph graph = getEntityGraph(clazz, subGraphItems); + query.setHint("javax.persistence.loadgraph", graph); + } + return query.getResultList(); }