Я считаю, что то, что вы пытаетесь достичь, требует некоторого рефакторинга. Похоже, вы пытаетесь создать универсальный класс Dao, который вы можете использовать повторно для запроса любого объекта Model. Проблема в том, что, не передавая класс методу, вы не можете получить тип универсального <T>
во время выполнения.
Один из способов выполнить то, что вы хотите, - создать базовый dao, который расширяется конкретными реализациями, которые знают класс, с которым они имеют дело во время компиляции.
public abstract class AbstractDao<T>{
private Class<T> clazz;
public AbstractDao(Class<T> clazz){
this.clazz = clazz;
}
public List<T> list() {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
List result = session.createQuery("from " + clazz.getName()).list();
return (List<T>) result;
}
}
Затем расширить класс:
class UserDao extends AbstractDao<User>{
public UserDao(){
super(User.class);
}
}
Затем вызовите метод:
List<User> users = userDao.list();