2017-12-17 22:34:24 +01:00
|
|
|
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;
|
2018-01-25 16:24:21 +01:00
|
|
|
import java.util.UUID;
|
2017-12-17 22:34:24 +01:00
|
|
|
|
2018-02-01 10:08:06 +01:00
|
|
|
|
2017-12-17 22:34:24 +01:00
|
|
|
@Repository("databaseCtx")
|
|
|
|
public class DatabaseContext<T extends DataEntity<T>> {
|
|
|
|
@Autowired
|
|
|
|
private EntityManager entityManager;
|
|
|
|
|
|
|
|
public QueryableList<T> getQueryable(Class<T> type) {
|
|
|
|
return new QueryableHibernateList<>(this.entityManager, type).setEntity(type);
|
|
|
|
}
|
|
|
|
|
|
|
|
public T createOrUpdate(T item, Class<T> type) {
|
|
|
|
if (item.getKeys()[0] != null) {
|
|
|
|
T oldItem = entityManager.find(type, item.getKeys()[0]);
|
2017-12-19 17:22:30 +01:00
|
|
|
if(oldItem!=null) {
|
|
|
|
oldItem.update(item);
|
|
|
|
entityManager.merge(oldItem);
|
|
|
|
return oldItem;
|
|
|
|
}else {
|
|
|
|
entityManager.persist(item);
|
|
|
|
}
|
2017-12-17 22:34:24 +01:00
|
|
|
} else entityManager.persist(item);
|
|
|
|
return item;
|
|
|
|
}
|
|
|
|
|
|
|
|
public long count(Class<T> entityClass) {
|
|
|
|
return ((Number) entityManager.createQuery("select count(e) from " + entityClass.getSimpleName() + " e").getSingleResult()).longValue();
|
|
|
|
}
|
|
|
|
|
2018-01-25 16:24:21 +01:00
|
|
|
public void delete(T item){
|
|
|
|
this.entityManager.remove(item);
|
|
|
|
}
|
2017-12-17 22:34:24 +01:00
|
|
|
}
|