如何使用Hibernate实现从数据库中获取数据的通用方法?

Dra*_*gon 4 java generics hibernate

我有添加,更新和删除实体的通用方法.但我也想使用泛型来检索数据.

这是我获取数据的方法:

public static List<ClassA> getAllClassAData() {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Criteria criteria = session.createCriteria(ClassA.class);
    return criteria.list();
}

public static List<ClassB> getAllClassBData() {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Criteria criteria = session.createCriteria(ClassB.class);
    return criteria.list();
}

public static List<ClassC> getAllClassCData() {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Criteria criteria = session.createCriteria(ClassC.class);
    return criteria.list();
}
Run Code Online (Sandbox Code Playgroud)

我试着做这样的事情:

public static <T> List<T> getAllData() {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Criteria criteria = session.createCriteria(???.class); //Here is where I'm stuck
    return criteria.list();
}
Run Code Online (Sandbox Code Playgroud)

我坚持将类作为arg传递给标准创建:

 Criteria criteria = session.createCriteria(Generic.class);
Run Code Online (Sandbox Code Playgroud)

如何让JVM知道我在标准创建过程中想要传递的类?

Kon*_*kov 7

您的通用方法看起来应该更像:

public static <T> List<T> getAllData(Class<T> clazz) {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Criteria criteria = session.createCriteria(clazz);
    return criteria.list();
}
Run Code Online (Sandbox Code Playgroud)

你应该调用它:

List<ClassA> list = getAllData(ClassA.class);
Run Code Online (Sandbox Code Playgroud)