package book.example.persistence.jpa; import book.example.persistence.model.Customer; import book.example.persistence.model.CustomerBase; import javax.persistence.EntityManager; import javax.persistence.Query; import java.util.Date; import java.util.List; public class PersistentCustomerBase implements CustomerBase { private final EntityManager entityManager; public PersistentCustomerBase(EntityManager entityManager) { this.entityManager = entityManager; } public void addCustomer(Customer customer) { entityManager.persist(customer); } @SuppressWarnings("unchecked") public List<Customer> customersWithExpiredCreditCardsAsOf(Date deadline) { Query query = entityManager.createQuery( "select c from Customer c, CreditCardDetails d " + "where d member of c.paymentMethods " + " and d.expiryDate < :deadline"); query.setParameter("deadline", deadline); return query.getResultList(); } }