Как реализовать универсальный репозиторий Spring Jpa для всех сущностей - PullRequest
2 голосов
/ 24 июня 2019

У меня есть другой BaseDaoImpl, который уже является универсальным, но я хочу добавить PaginationandSortiongRepository в качестве универсального. Пожалуйста, помогите реализовать Я пытался всеми способами добавить GenericJPADAO в качестве bean-компонента, но это невозможно, есть ли другой способ реализации?

public interface BaseDao<T, ID extends Serializable> {

    public List<T> findAll();

    public T findOne(final long id);

    public T update(T object);

    public T get(Long id);

    public void delete(T object);

    public void insert(T object);

    public boolean exists(Long id);

    T getByCondition(String fieldName, Object value);

    List<T> getALL();
}





public class BaseDaoImpl<T, ID extends Serializable> implements BaseDao<T, ID> {
    @PersistenceContext
    protected EntityManager entityManager;

    private Class<T> entityType;

    public BaseDaoImpl() {
        this.entityType = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass())
                .getActualTypeArguments()[0];

    }

    @Override
    @Transactional
    public void insert(T entity) {
        entityManager.persist(entity);
    }

    @Transactional
    public List<T> findAll() {
        return entityManager.createQuery("from " + entityType.getName()).getResultList();
    }

    @Override
    @Transactional
    public T findOne(long id) {
        return entityManager.find(entityType, id);
    }

    @Override
    @Transactional
    public T update(T entity) {
        return entityManager.merge(entity);
    }

    @Override
    @Transactional
    public T get(Long id) {
        // TODO Auto-generated method stub
        return entityManager.find(entityType, id);
    }

    @Override
    @Transactional
    public void delete(T object) {
        entityManager.remove(object);

    }

    @Override
    @Transactional
    public boolean exists(Long id) {
        return entityManager.contains(id);
    }

    @Override
    @Transactional
    public T getByCondition(String fieldName, Object value) {
        System.out.println(entityType);
        CriteriaBuilder cb = entityManager.getCriteriaBuilder();
        CriteriaQuery<T> criteria = cb.createQuery(entityType);
        Root<T> member = criteria.from(entityType);
        criteria.select(member).where(cb.equal(member.get(fieldName), value + ""));
        List<T> results = entityManager.createQuery(criteria).getResultList();
        if (results.isEmpty()) {
            return null;
        } else {
            return (T) results.get(0);
        }

    }

    @Override
    public List<T> getALL() {
        return null;
    }}





@NoRepositoryBean
public interface GenericJpaDao<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID> {

    enter code here

}





@Repository
public class AccountDaoImpl extends BaseDaoImpl<Account, Long> implements AccountDao {
    /*  Not able to Inject If add @Repository on GenericJapDao, How to Implement As generic Same as BaseDaoImpl*/   
    GenericJpaDao< Account, Long> generiCJPADao;

    @Override
    public Account getAccount(String emailAddress) {
        return getByCondition("emailAddress", emailAddress);
    }

    @Override
    public void saveAccount(Account account) {
        insert(account);

    }}

Невозможно добавить GenericJPA, и я не уверен, как сделать репозиторий как Generic, Thnaks in Advance

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...