argos/dmp-backend/src/main/java/eu/eudat/dao/databaselayer/context/DatabaseContext.java

58 lines
1.9 KiB
Java
Raw Normal View History

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;
2018-02-07 10:56:30 +01:00
import org.springframework.transaction.annotation.Transactional;
2018-02-07 10:56:30 +01:00
import javax.persistence.*;
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;
2018-02-01 10:08:06 +01:00
@Repository("databaseCtx")
public class DatabaseContext<T extends DataEntity<T>> {
2018-02-07 10:56:30 +01:00
@PersistenceContext
private EntityManager entityManager;
2018-02-07 10:56:30 +01:00
@Autowired
public DatabaseContext(EntityManagerFactory entityManagerFactory) {
this.entityManager = entityManagerFactory.createEntityManager();
}
public QueryableList<T> getQueryable(Class<T> type) {
return new QueryableHibernateList<>(this.entityManager, type).setEntity(type);
}
2018-02-07 10:56:30 +01:00
@Transactional
public T createOrUpdate(T item, Class<T> type) {
2018-02-07 10:56:30 +01:00
EntityManager entityManager = this.entityManager;
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);
}
} else entityManager.persist(item);
return item;
}
public long count(Class<T> entityClass) {
2018-02-07 10:56:30 +01:00
EntityManager entityManager = this.entityManager;
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);
}
}