How to implement a general method for retrieving data from a database using Hibernate?

I have a general method for adding, updating, and deleting objects. But I also want to use generics to retrieve data.

Here are my methods for getting data:

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();
}

I tried to do something like this:

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();
}

And I was fixated on passing the class as arg to create criteria:

 Criteria criteria = session.createCriteria(Generic.class);

How can I create a JVM, which class am I trying to pass when creating criteria?

+4
source share
4 answers

Your general method should look more:

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

and you should call it like this:

List<ClassA> list = getAllData(ClassA.class);
+6
source

. , . , , T.class

public static <T> List<T> getAllData(Class<T> klass) {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Criteria criteria = session.createCriteria(klass);
    return criteria.list();
}
+2

-, , .

, , https://github.com/sajit/Webgearz/blob/master/src/main/java/com/webgearz/tb/daos/impl/AbstractMongoDao.java

protected Class<N> persistentClass;

        public Class<N> getPersistentClass() {
                return persistentClass;
        }

. , .

0

All Articles