Как преобразовать java .lang.Class в класс POJO Entity? - PullRequest
1 голос
/ 09 мая 2020

Я хочу преобразовать java.lang.Class в POJO Entity класс?
Чтобы я мог передать Entity class как parameter методу, который я не хочу писать отдельный метод для каждого Entity class операция как поиск id.

Мой код выглядит следующим образом:

public Class isIdExist(int id, Class cls) {
    Class clas = cls;
    try ( Session session = sessionFactory.openSession()) {
        CriteriaBuilder cb = session.getCriteriaBuilder();
        CriteriaQuery<Class> cq = (CriteriaQuery<Class>) cb.createQuery(clas);

        Root root = cq.from(clas);
        cq.where(cb.equal(root.get("id"), id));
        clas = session.createQuery(cq).uniqueResult();
    }
    return clas;
}  

Код клиента:

public static void main(String[] args) {
    HibernateUtil.getSessionFactory();
    BLManager bLManager = new BLManager();

    bLManager.isIdExist(1, Citizen.class);

}

Но я ' m получение:

java.lang.ClassCastException: class practice.pojo.Citizen cannot be cast to class java.lang.Class  

Для простоты понимания я попробовал следующее:

    Class cls = Citizen.class;

    System.out.println("Citizen to java.lang.Class: " + cls);

    Citizen citizen = (Citizen.class.cast(cls));

    System.err.println("java.lang.Class to Citizen: " + citizen);  
   // also tried  
   Citizen citizen = (Citizen) cls; //compile time error.

Как я могу этого добиться?

1 Ответ

1 голос
/ 09 мая 2020

При использовании Class вы можете использовать только Class, а не любой java класс.
Что вам нужно сделать, так это использовать тип generi c для передачи фактического класса, который вы хотите:

public <T> T isIdExist(int id, Class<T> cls) {
    try ( Session session = sessionFactory.openSession()) {
        CriteriaBuilder cb = session.getCriteriaBuilder();
        CriteriaQuery<T> cq = (CriteriaQuery<T>) cb.createQuery(cls);

        Root root = cq.from(cls);
        cq.where(cb.equal(root.get("id"), id));
        return session.createQuery(cq).uniqueResult();
    }
}
...