Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package metubeV2.repository;
- import metubeV2.domain.entities.Tube;
- import metubeV2.repository.interfaces.TubeRepository;
- import javax.inject.Inject;
- import javax.persistence.EntityManager;
- import javax.persistence.NoResultException;
- import javax.persistence.criteria.CriteriaBuilder;
- import javax.persistence.criteria.CriteriaQuery;
- import javax.persistence.criteria.Root;
- import java.util.List;
- import java.util.Optional;
- import static metubeV2.constants.Constants.PARAMETER_ID;
- public class TubeRepositoryImpl implements TubeRepository {
- private final EntityManager entityManager;
- @Inject
- public TubeRepositoryImpl(EntityManager entityManager) {
- this.entityManager = entityManager;
- }
- @Override
- public Tube save(Tube entity) {
- this.entityManager.getTransaction().begin();
- this.entityManager.persist(entity);
- this.entityManager.getTransaction().commit();
- return entity;
- }
- @Override
- public List<Tube> findAll() {
- this.clearCache();
- CriteriaBuilder criteriaBuilder = this.entityManager
- .getCriteriaBuilder();
- CriteriaQuery<Tube> criteriaQuery = criteriaBuilder
- .createQuery(Tube.class);
- Root<Tube> root = criteriaQuery.from(Tube.class);
- criteriaQuery.select(root);
- return this.entityManager
- .createQuery(criteriaQuery)
- .setHint("org.hibernate.cacheMode", "IGNORE")
- .getResultList();
- }
- @Override
- public Optional<Tube> findById(String id) {
- return getEntityByParameter(id, PARAMETER_ID);
- }
- @Override
- public Tube update(Tube tube) {
- this.entityManager.getTransaction().begin();
- this.entityManager.merge(tube);
- this.entityManager.getTransaction().commit();
- return tube;
- }
- private Optional<Tube> getEntityByParameter(String name,
- String parameterName) {
- this.clearCache();
- CriteriaBuilder criteriaBuilder = this.entityManager
- .getCriteriaBuilder();
- CriteriaQuery<Tube> criteriaQuery = criteriaBuilder
- .createQuery(Tube.class);
- Root<Tube> root = criteriaQuery.from(Tube.class);
- criteriaQuery.select(root)
- .where(criteriaBuilder
- .equal(root.get(parameterName), name));
- try {
- return Optional.ofNullable(this.entityManager
- .createQuery(criteriaQuery)
- .setHint("org.hibernate.cacheMode", "IGNORE")//TODO
- .getSingleResult());
- } catch (NoResultException ignored) {
- return Optional.empty();
- }
- }
- private void clearCache() {
- //TODO
- this.entityManager
- .getEntityManagerFactory()
- .getCache()
- .evictAll();
- this.entityManager.getTransaction().begin();
- this.entityManager.getTransaction().commit();
- }
- }
Add Comment
Please, Sign In to add comment