@Repository @Transactional(readOnly = true) class AccountServiceImpl implements AccountService { @PersistenceContext private EntityManager em; @Override @Transactional public Account save(Account account) { if (account.getId() == null) { em.persist(account); return account; } else { return em.merge(account); } } @Override public List<Account> findByCustomer(Customer customer) { TypedQuery query = em.createQuery("select a from Account a where a.customer = ?1", Account.class); query.setParameter(1, customer); return query.getResultList(); } @Override public List<Customer> findAll(int page, int pageSize) { TypedQuery query = em.createQuery("select c from Customer c", Customer.class); query.setFirstResult(page * pageSize); query.setMaxResults(pageSize); return query.getResultList(); } }