package com.hantsylabs.example.spring.repository; import java.util.List; import javax.cache.annotation.CachePut; import javax.cache.annotation.CacheRemove; import javax.cache.annotation.CacheRemoveAll; import javax.cache.annotation.CacheResult; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Repository; import com.hantsylabs.example.spring.model.Conference; @Repository public class JpaConferenceRepositoryImpl implements ConferenceRepository { private static final Logger log = LoggerFactory .getLogger(JpaConferenceRepositoryImpl.class); @PersistenceContext private EntityManager entityManager; @Override @CacheResult(cacheName = "conference") public Conference findById(Long id) { return (Conference) entityManager.find(Conference.class, id); } @Override @CachePut(cacheName = "conference" ) public Conference save(final Conference conference) { if (conference.isNew()) { entityManager.persist(conference); entityManager.flush(); return conference; } else { Conference conf = entityManager.merge(conference); entityManager.flush(); return conf; } } @Override @CacheRemove(cacheName = "conference" ) public void delete(final Long id) { entityManager.remove(entityManager.find(Conference.class, id)); entityManager.flush(); } @Override @CacheRemove(cacheName = "conference" ) public void delete(final Conference conf) { entityManager.remove(entityManager.merge(conf)); entityManager.flush(); } @Override @CacheRemoveAll(cacheName = "conference") public void deleteAll() { List<Conference> all = entityManager.createQuery("from Conference", Conference.class).getResultList(); for (Conference c : all) { delete(c); } entityManager.flush(); } @Override @CacheResult(cacheName = "conference") public Conference findBySlug(String slug) { List<Conference> all = entityManager .createQuery("from Conference where slug=:slug", Conference.class).setParameter("slug", slug) .getResultList(); if (!all.isEmpty()) { return all.get(0); } return null; } }