1.1 --- a/src/main/java/ru/indvdum/jpa/dao/JPADataAccessObject.groovy Sat Nov 24 16:11:35 2012 +0400
1.2 +++ b/src/main/java/ru/indvdum/jpa/dao/JPADataAccessObject.groovy Sun Nov 25 03:14:01 2012 +0400
1.3 @@ -59,7 +59,7 @@
1.4 tx.rollback()
1.5 }
1.6 }
1.7 -
1.8 +
1.9 void detach(Object entity) {
1.10 em.detach(entity);
1.11 }
1.12 @@ -154,8 +154,10 @@
1.13 return true
1.14 }
1.15
1.16 - public <T> T find(Class<T> entityClass, Object primaryKey) {
1.17 - return em.find(entityClass, primaryKey);
1.18 + public <T> List<T> list(Class<T> entityClass) {
1.19 + CriteriaQuery<T> query = em.getCriteriaBuilder().createQuery(entityClass);
1.20 + query.from(entityClass);
1.21 + return new ArrayList(em.createQuery(query).getResultList());
1.22 }
1.23
1.24 public <T> List<T> list(Class<T> entityClass, Map<String, Object> equalProperties, Map<String, Object> notEqualProperties) {
1.25 @@ -181,6 +183,29 @@
1.26 return em.createQuery(query).getResultList();
1.27 }
1.28
1.29 + public <T> List<T> list(Class<T> entityClass, Object ... equalFieldNamesAndValues) {
1.30 + if (equalFieldNamesAndValues.length % 2 != 0)
1.31 + throw new RuntimeException("Illegal arguments count: ${equalFieldNamesAndValues.length}");
1.32 + Map fieldValues = [:];
1.33 + for (int i = 0; i < equalFieldNamesAndValues.length;) {
1.34 + String field = (String) equalFieldNamesAndValues[i++];
1.35 + Object value = equalFieldNamesAndValues[i++];
1.36 + fieldValues["${field}"] = value;
1.37 + }
1.38 + return list(entityClass, fieldValues, null);
1.39 + }
1.40 +
1.41 + public List list(String jpql, Object ... paramValues) {
1.42 + Query query = em.createQuery(jpql);
1.43 + for (int i = 0; i < paramValues.length; i++)
1.44 + query.setParameter(i + 1, paramValues[i]);
1.45 + return query.getResultList();
1.46 + }
1.47 +
1.48 + public <T> T find(Class<T> entityClass, Object primaryKey) {
1.49 + return em.find(entityClass, primaryKey);
1.50 + }
1.51 +
1.52 public <T> T find(Class<T> entityClass, Map<String, Object> equalProperties, Map<String, Object> notEqualProperties) {
1.53 CriteriaBuilder cb = em.getCriteriaBuilder();
1.54 CriteriaQuery<T> query = cb.createQuery(entityClass);
1.55 @@ -210,14 +235,24 @@
1.56 return result;
1.57 }
1.58
1.59 - public <T> T find(Class<T> entityClass, String field, Object value) {
1.60 - return find(entityClass, ["${field}": value], null);
1.61 + public <T> T find(Class<T> entityClass, Object ... equalFieldNamesAndValues) {
1.62 + if (equalFieldNamesAndValues.length % 2 != 0)
1.63 + throw new RuntimeException("Illegal arguments count: ${equalFieldNamesAndValues.length}");
1.64 + Map fieldValues = [:];
1.65 + for (int i = 0; i < equalFieldNamesAndValues.length;) {
1.66 + String field = (String) equalFieldNamesAndValues[i++];
1.67 + Object value = equalFieldNamesAndValues[i++];
1.68 + fieldValues["${field}"] = value;
1.69 + }
1.70 + return find(entityClass, fieldValues, null);
1.71 }
1.72 -
1.73 - public <T> List<T> list(Class<T> entityClass) {
1.74 - CriteriaQuery<T> query = em.getCriteriaBuilder().createQuery(entityClass);
1.75 - query.from(entityClass);
1.76 - return new ArrayList(em.createQuery(query).getResultList());
1.77 +
1.78 +
1.79 + public Object find(String jpql, Object ... paramValues) {
1.80 + Query query = em.createQuery(jpql);
1.81 + for (int i = 0; i < paramValues.length; i++)
1.82 + query.setParameter(i + 1, paramValues[i]);
1.83 + return query.getSingleResult();
1.84 }
1.85
1.86 public boolean contains(Collection entities) {