Например: у меня есть User.class и Post.Class. Я хочу получить все строки из этой таблицы в режиме гибернации.Это делается с
TypedQuery<Post> query = SessionFactory.getCurrentSession().createQuery("from Post");
Также у меня есть слой дао, UserDao и PostDao.и у меня есть абстрактный класс CrudDao с такими методами, как:
public abstract class CrudDao<T> {
@Transactional
public void save(T entity) {
SessionFactory.getCurrentSession().save(entity);
}
}
Так что мой пользователь и пост-дао просто расширяют этот crudDao, и мне не нужно писать для них метод сохранения.Когда я хочу получить все строки, мне нужно написать «из MyEntitie».Но я хочу сделать этот метод также абстрактным, поэтому мне не нужно писать его несколько раз для каждого дао.Но я не могу написать «из T» абстрактным методом.
Я также пытался сделать так:
List<T> getAll(Class<T> type){
CriteriaQuery<T> criteria = builder.createQuery(type);
criteria.from(type);
return
SessionFactory.getCurrentSession().createQuery(criteria).getResultList();
}
Так что в моем сервисе я называю своего дао так:
PostDao.getAll(Post.class);
И мне сказали, что мой сервис не должен знать о моей сущности, и мой вызов dao в службе должен быть PostDao.getAll();
И если я делаю так, то мне нужно написать метод getAll в каждом дао, и этовыглядит как много скопированного кода.
Можете ли вы дать мне несколько советов о том, как это сделать или как вы делаете это в своих проектах?