Guest User

TubeRepositoryImpl

a guest
Feb 12th, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.07 KB | None | 0 0
  1. package metubeV2.repository;
  2.  
  3. import metubeV2.domain.entities.Tube;
  4. import metubeV2.repository.interfaces.TubeRepository;
  5.  
  6. import javax.inject.Inject;
  7. import javax.persistence.EntityManager;
  8. import javax.persistence.NoResultException;
  9. import javax.persistence.criteria.CriteriaBuilder;
  10. import javax.persistence.criteria.CriteriaQuery;
  11. import javax.persistence.criteria.Root;
  12. import java.util.List;
  13. import java.util.Optional;
  14.  
  15. import static metubeV2.constants.Constants.PARAMETER_ID;
  16.  
  17. public class TubeRepositoryImpl implements TubeRepository {
  18.  
  19.     private final EntityManager entityManager;
  20.  
  21.     @Inject
  22.     public TubeRepositoryImpl(EntityManager entityManager) {
  23.         this.entityManager = entityManager;
  24.     }
  25.  
  26.     @Override
  27.     public Tube save(Tube entity) {
  28.         this.entityManager.getTransaction().begin();
  29.         this.entityManager.persist(entity);
  30.         this.entityManager.getTransaction().commit();
  31.  
  32.         return entity;
  33.     }
  34.  
  35.     @Override
  36.     public List<Tube> findAll() {
  37.         this.clearCache();
  38.  
  39.         CriteriaBuilder criteriaBuilder = this.entityManager
  40.                 .getCriteriaBuilder();
  41.         CriteriaQuery<Tube> criteriaQuery = criteriaBuilder
  42.                 .createQuery(Tube.class);
  43.         Root<Tube> root = criteriaQuery.from(Tube.class);
  44.  
  45.         criteriaQuery.select(root);
  46.  
  47.         return this.entityManager
  48.                 .createQuery(criteriaQuery)
  49.                 .setHint("org.hibernate.cacheMode", "IGNORE")
  50.                 .getResultList();
  51.     }
  52.  
  53.     @Override
  54.     public Optional<Tube> findById(String id) {
  55.         return getEntityByParameter(id, PARAMETER_ID);
  56.     }
  57.  
  58.     @Override
  59.     public Tube update(Tube tube) {
  60.         this.entityManager.getTransaction().begin();
  61.         this.entityManager.merge(tube);
  62.         this.entityManager.getTransaction().commit();
  63.  
  64.         return tube;
  65.     }
  66.  
  67.     private Optional<Tube> getEntityByParameter(String name,
  68.                                                 String parameterName) {
  69.         this.clearCache();
  70.  
  71.         CriteriaBuilder criteriaBuilder = this.entityManager
  72.                 .getCriteriaBuilder();
  73.         CriteriaQuery<Tube> criteriaQuery = criteriaBuilder
  74.                 .createQuery(Tube.class);
  75.         Root<Tube> root = criteriaQuery.from(Tube.class);
  76.  
  77.         criteriaQuery.select(root)
  78.                 .where(criteriaBuilder
  79.                         .equal(root.get(parameterName), name));
  80.  
  81.         try {
  82.             return Optional.ofNullable(this.entityManager
  83.                     .createQuery(criteriaQuery)
  84.                     .setHint("org.hibernate.cacheMode", "IGNORE")//TODO
  85.                     .getSingleResult());
  86.  
  87.         } catch (NoResultException ignored) {
  88.             return Optional.empty();
  89.         }
  90.     }
  91.  
  92.     private void clearCache() {
  93.         //TODO
  94.         this.entityManager
  95.                 .getEntityManagerFactory()
  96.                 .getCache()
  97.                 .evictAll();
  98.  
  99.         this.entityManager.getTransaction().begin();
  100.         this.entityManager.getTransaction().commit();
  101.     }
  102. }
Add Comment
Please, Sign In to add comment