Files
Athou_commafeed/src/main/java/com/commafeed/backend/dao/GenericDAO.java

123 lines
3.0 KiB
Java
Raw Normal View History

2013-03-20 20:33:42 +01:00
package com.commafeed.backend.dao;
import java.io.Serializable;
2013-03-20 20:33:42 +01:00
import java.util.List;
import javax.annotation.PostConstruct;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
2013-03-23 19:46:09 +01:00
import com.commafeed.backend.model.AbstractModel;
2013-03-23 17:17:27 +01:00
import com.commafeed.frontend.utils.ModelFactory.MF;
2013-03-20 20:33:42 +01:00
import com.google.common.reflect.TypeToken;
import com.uaihebert.factory.EasyCriteriaFactory;
import com.uaihebert.model.EasyCriteria;
2013-03-21 08:55:53 +01:00
@SuppressWarnings("serial")
2013-03-27 11:32:22 +01:00
public abstract class GenericDAO<T, K> implements Serializable {
2013-03-20 20:33:42 +01:00
private TypeToken<T> type = new TypeToken<T>(getClass()) {
};
@PersistenceContext
protected EntityManager em;
protected CriteriaBuilder builder;
@PostConstruct
public void init() {
builder = em.getCriteriaBuilder();
}
public void save(T object) {
em.persist(object);
}
public void update(T... objects) {
for (Object object : objects) {
em.merge(object);
}
}
2013-03-23 19:46:09 +01:00
public void saveOrUpdate(AbstractModel m) {
if (m.getId() == null) {
em.persist(m);
} else {
em.merge(m);
}
}
2013-03-20 20:33:42 +01:00
public void delete(T object) {
object = em.merge(object);
em.remove(object);
}
2013-03-24 13:11:05 +01:00
public void deleteById(K id) {
2013-03-20 20:33:42 +01:00
Object ref = em.getReference(getType(), id);
em.remove(ref);
}
public T findById(K id) {
T t = em.find(getType(), id);
return t;
}
public List<T> findAll() {
return EasyCriteriaFactory.createQueryCriteria(em, getType())
.getResultList();
}
public List<T> findAll(int startIndex, int count) {
EasyCriteria<T> criteria = EasyCriteriaFactory.createQueryCriteria(em,
getType());
criteria.setMaxResults(count);
criteria.setFirstResult(startIndex);
return criteria.getResultList();
}
2013-03-29 12:59:21 +01:00
public List<T> findAll(int startIndex, int count, String orderBy,
boolean asc) {
EasyCriteria<T> criteria = EasyCriteriaFactory.createQueryCriteria(em,
getType());
criteria.setMaxResults(count);
criteria.setFirstResult(startIndex);
if (asc) {
criteria.orderByAsc(orderBy);
} else {
criteria.orderByDesc(orderBy);
}
return criteria.getResultList();
}
2013-03-20 20:33:42 +01:00
public long getCount() {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Long> query = builder.createQuery(Long.class);
Root<T> root = query.from(getType());
query.select(builder.count(root));
return em.createQuery(query).getSingleResult();
}
public List<T> findByField(String field, Object value) {
2013-03-27 11:32:22 +01:00
EasyCriteria<T> criteria = createCriteria();
2013-03-20 20:33:42 +01:00
criteria.andEquals(field, value);
return criteria.getResultList();
}
@SuppressWarnings("unchecked")
protected Class<T> getType() {
return (Class<T>) type.getRawType();
}
2013-03-27 11:32:22 +01:00
public EasyCriteria<T> createCriteria() {
2013-03-25 12:24:00 +01:00
return EasyCriteriaFactory.createQueryCriteria(em, getType());
}
2013-03-20 20:33:42 +01:00
2013-03-23 17:17:27 +01:00
protected T proxy() {
return MF.p(getType());
}
2013-03-20 20:33:42 +01:00
}