package com.baeldung.services.impl; import com.baeldung.services.IOperations; import com.google.common.collect.Lists; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; import java.util.List; @Transactional public abstract class AbstractService implements IOperations { // read - one @Override @Transactional(readOnly = true) public T findOne(final long id) { return getDao().findById(id).orElse(null); } // read - all @Override @Transactional(readOnly = true) public List findAll() { return Lists.newArrayList(getDao().findAll()); } @Override public Page findPaginated(final int page, final int size) { return getDao().findAll(new PageRequest(page, size)); } // write @Override public T create(final T entity) { return getDao().save(entity); } @Override public T update(final T entity) { return getDao().save(entity); } @Override public void delete(final T entity) { getDao().delete(entity); } @Override public void deleteById(final long entityId) { getDao().deleteById(entityId); } protected abstract PagingAndSortingRepository getDao(); }