Moar data access methods
authorindvdum (gotoindvdum[at]gmail[dot]com)
Sun, 25 Nov 2012 03:14:01 +0400
changeset 16409046072775
parent 15 7d8a7e7635d2
child 17 ddaceba1ed1e
Moar data access methods
src/main/java/ru/indvdum/jpa/dao/JPADataAccessObject.groovy
     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) {