有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java动态地将值传递给泛型方法

我使用的是Hibernate,我有很多这类方法:

 public static void modifySchemeEvents(String schmCode, String username) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
            Criteria cr = session.createCriteria(SchmEventsTable.class);
            cr.add(Restrictions.eq("schmCode", schmCode));
            SchmEventsTable evt = (SchmEventsTable) cr.uniqueResult();
            evt.setLchgUserId(username);
            tx.commit();
        } catch (HibernateException asd) {
            log.debug(asd.getMessage());
            if (tx != null) {
                tx.rollback();
            }
        } finally {
            session.close();
        }
    }

这使用schmCode所在的用户名更新了数据库<schmCode>我正在尝试转换为泛型,这样我就不必为所有更新编写单独的方法,因此我提出了这个泛型方法:

public static <T> T getUpdateObject(Class c, Map<String, ?> params) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = null;
        T value = null;
        try {
            tx = session.beginTransaction();
            Criteria cr = session.createCriteria(c);
            for (Map.Entry<String, ?> entry : params.entrySet()) {
                cr.add(Restrictions.eq(entry.getKey(), entry.getValue()));
            }
            value = (T) cr.uniqueResult();
////How to set the values here?***
            tx.commit();
        } catch (HibernateException asd) {
            log.debug(asd.getMessage());
            if (tx != null) {
                tx.commit();
            }
        } finally {
            session.close();
        }
        return value;
    }

我试图这样使用它:

Map<String, String> schemeEventMap = new HashMap();
schemeEventMap.put("schmCode", "CA201");
SchmEventsTable evt = DataOperation.getUpdateObject(SchmEventsTable.class, schemeEventMap);
evt.setLchgUserId(username);

这不会像第一个方法那样更新表。我想知道如何在泛型方法中动态传递参数


共 (0) 个答案