# HG changeset patch # User indvdum (gotoindvdum[at]gmail[dot]com) # Date 1353798841 -14400 # Node ID 409046072775e0bb53493d221e10d830a356853f # Parent 7d8a7e7635d27f96619f7c6680a31a9b616fdfab Moar data access methods diff -r 7d8a7e7635d2 -r 409046072775 src/main/java/ru/indvdum/jpa/dao/JPADataAccessObject.groovy --- a/src/main/java/ru/indvdum/jpa/dao/JPADataAccessObject.groovy Sat Nov 24 16:11:35 2012 +0400 +++ b/src/main/java/ru/indvdum/jpa/dao/JPADataAccessObject.groovy Sun Nov 25 03:14:01 2012 +0400 @@ -59,7 +59,7 @@ tx.rollback() } } - + void detach(Object entity) { em.detach(entity); } @@ -154,8 +154,10 @@ return true } - public T find(Class entityClass, Object primaryKey) { - return em.find(entityClass, primaryKey); + public List list(Class entityClass) { + CriteriaQuery query = em.getCriteriaBuilder().createQuery(entityClass); + query.from(entityClass); + return new ArrayList(em.createQuery(query).getResultList()); } public List list(Class entityClass, Map equalProperties, Map notEqualProperties) { @@ -181,6 +183,29 @@ return em.createQuery(query).getResultList(); } + public List list(Class entityClass, Object ... equalFieldNamesAndValues) { + if (equalFieldNamesAndValues.length % 2 != 0) + throw new RuntimeException("Illegal arguments count: ${equalFieldNamesAndValues.length}"); + Map fieldValues = [:]; + for (int i = 0; i < equalFieldNamesAndValues.length;) { + String field = (String) equalFieldNamesAndValues[i++]; + Object value = equalFieldNamesAndValues[i++]; + fieldValues["${field}"] = value; + } + return list(entityClass, fieldValues, null); + } + + public List list(String jpql, Object ... paramValues) { + Query query = em.createQuery(jpql); + for (int i = 0; i < paramValues.length; i++) + query.setParameter(i + 1, paramValues[i]); + return query.getResultList(); + } + + public T find(Class entityClass, Object primaryKey) { + return em.find(entityClass, primaryKey); + } + public T find(Class entityClass, Map equalProperties, Map notEqualProperties) { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery query = cb.createQuery(entityClass); @@ -210,14 +235,24 @@ return result; } - public T find(Class entityClass, String field, Object value) { - return find(entityClass, ["${field}": value], null); + public T find(Class entityClass, Object ... equalFieldNamesAndValues) { + if (equalFieldNamesAndValues.length % 2 != 0) + throw new RuntimeException("Illegal arguments count: ${equalFieldNamesAndValues.length}"); + Map fieldValues = [:]; + for (int i = 0; i < equalFieldNamesAndValues.length;) { + String field = (String) equalFieldNamesAndValues[i++]; + Object value = equalFieldNamesAndValues[i++]; + fieldValues["${field}"] = value; + } + return find(entityClass, fieldValues, null); } - - public List list(Class entityClass) { - CriteriaQuery query = em.getCriteriaBuilder().createQuery(entityClass); - query.from(entityClass); - return new ArrayList(em.createQuery(query).getResultList()); + + + public Object find(String jpql, Object ... paramValues) { + Query query = em.createQuery(jpql); + for (int i = 0; i < paramValues.length; i++) + query.setParameter(i + 1, paramValues[i]); + return query.getSingleResult(); } public boolean contains(Collection entities) {