动态将值传递给通用方法

时间:2019-05-23 13:57:49

标签: java hibernate generics hibernate-criteria

我正在使用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>的用户名更新了数据库,因此我不必为所有更新编写单独的方法,因此我想出了以下通用方法: / p>

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 个答案:

没有答案