package eu.eudat.dao.databaselayer.context; import eu.eudat.entities.DataEntity; import eu.eudat.queryable.QueryableList; import eu.eudat.queryable.hibernatequeryablelist.QueryableHibernateList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import javax.persistence.EntityManager; import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import java.util.List; /** * Created by giannis on 7/16/2017. */ @Repository("databaseCtx") public class DatabaseContext> { @Autowired private EntityManager entityManager; public QueryableList getQueryable(Class type) { return new QueryableHibernateList<>(this.entityManager, type).setEntity(type); } public T createOrUpdate(T item, Class type) { if (item.getKeys()[0] != null) { T oldItem = entityManager.find(type, item.getKeys()[0]); if(oldItem!=null) { oldItem.update(item); entityManager.merge(oldItem); return oldItem; }else { entityManager.persist(item); } } else entityManager.persist(item); return item; } public long count(Class entityClass) { return ((Number) entityManager.createQuery("select count(e) from " + entityClass.getSimpleName() + " e").getSingleResult()).longValue(); } }