Я реализую общий слой дао в приложении для спокойных веб-сервисов, построенном с использованием Spring Boot и Jersey.У меня есть несколько идентичных контроллеров ресурсов, поэтому, чтобы избежать дублирования одних и тех же методов, я хочу создать контроллеры GenericControllers или GenericResources.У меня возникла проблема при вводе genericDao в эти контроллеры.Для этих общих ресурсов мне не нужны специальные услуги.
public interface IGenericDAO<T extends Serializable> {
T findOne(final Integer id);
List<T> findAll();
T create(final T entity);
void update(final T entity);
void delete(final T entity);
void deleteById(final Integer id);
}
public abstract class AbstractGenericDAO<T extends Serializable> implements IGenericDAO<T> {
private final Class<T> clazz;
@SuppressWarnings("unchecked")
public AbstractGenericDAO() {
this.clazz = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
/**
* getSession() from EntityManager which is already configured in spring-boot-starter-data-jpa.
* We inject EntityManager instead of SessionFactory
*/
@Autowired
private EntityManager entityManager;
protected Session getCurrentSession() {
return this.entityManager.unwrap(Session.class);
}
@Override
public T findOne(Integer id) {
// TODO Auto-generated method stub
return (T) getCurrentSession().get(this.clazz, id);
}
@Override
public List<T> findAll() {
// TODO Auto-generated method stub
CriteriaQuery<T> cq = getCurrentSession().getCriteriaBuilder().createQuery(this.clazz);
cq.from(this.clazz);
return getCurrentSession().createQuery(cq).getResultList();
}
@SuppressWarnings("unchecked")
@Override
public T create(T entity) {
// TODO Auto-generated method stub
return ((T) getCurrentSession().save(entity));
}
@Override
public void update(T entity) {
// TODO Auto-generated method stub
getCurrentSession().saveOrUpdate(entity);
}
@Override
public void delete(T entity) {
// TODO Auto-generated method stub
getCurrentSession().delete(entity);
}
@Override
public void deleteById(Integer id) {
// TODO Auto-generated method stub
T entity = this.findOne(id);
this.delete(entity);
}
}
И вот моя проблема.Я хочу ресурсы дженериков здесь:
public class GenericResource<T extends Serializable> extends AbstractGenericDAO<T> {
/*@GET
@Secured({"ROLE_ADMIN"})
public Response list() {
return Response.ok().entity(dao.findAll()).build();
}*/
}