我有以下方法applyIncentives需要ListlstIds

public void applyIncentives(List<String> lstIds) throws Exception {
    Session session = null;
    Transaction tx = null;
    String pricingTierId = null;
    if (lstIds != null && lstIds.size() > 0) {
        for (String lstpricingTierIds : lstIds) {
            pricingTierId = lstpricingTierIds.trim();
        }
    }

    try {
        session = HibernateSessionFactory.getSession();
        tx = session.beginTransaction();

        SQLQuery query = session.createSQLQuery("select * from customer.apply_incentives(:pricingTierId)");
        query.setString("pricingTierId", pricingTierId);
        query.list();

        tx.commit();
        approveFlag = true;
    }
    catch (Exception ex) {
        log.error("Exception", ex);
    }
    finally {
        if (session != null)
            session.close();
    }
    return approveFlag;
}


我从lstIds传递pricingTierId并传递到接受Integer的存储过程。

调试时,lstIds的值为“ 52512,85822”,两个pricingTierId's用逗号(,)分隔。

在将pricingTierId传递到存储的Proc之前,我已经编写了以下内容:

String pricingTierId = null ;
if (lstIds != null && lstIds.size() > 0) {
    for (String lstpricingTierIds : lstIds) {
        pricingTierId = lstpricingTierIds.trim();
    }
}


我的问题:


如何用逗号分隔pricingTierId(,)?
由于我要传递列表List<String> lstIds,因此不能直接使用pricingTierId = lstpricingTierIds.trim().split(",")
如果我将String pricingTierId = null更改为String[] pricingTierId
我在query.setString("pricingTierId", pricingTierId);时出错
如果我使用query.setInteger("pricingTierId", Integer.parseInt(pricingTierId));,则由于逗号(,)被传递给存储的proc,所以我得到Numberformat Exception。


按照建议添加了代码

List<String> pricingTierId = null;
if (lstIds != null && lstIds.size() > 0) {
    for(String lstpricingTierIds : lstIds) {
        pricingTierId = Arrays.asList(lstpricingTierIds.trim().split(","));
    }
}


但是我在以下位置得到错误:

query.setString("pricingTierId", pricingTierId);


setString不能用于String[]

而且我不能使用query.setInteger("pricingTierId", Integer.parseInt(pricingTierId));
就像说的那样,将pricingTierId的类型更改为String

最佳答案

如何将其从拆分创建的数组中取出然后循环:

String[] pricingTierIdArray = lstpricingTierIds.trim().split(",");
for(String s : pricingTierIdArray ) {
    query.setInteger("pricingTierId", Integer.parseInt(s));
}


setInteger()方法将覆盖先前的值。除非您更改查询,否则只能设置一个ID。

或者只是:

String pricingTierIdArray = lstpricingTierIds.trim().split(",")[0]; //This depends on whether you need both values or not.

09-27 02:40