0

我正在使用 Criteria API 进行介绍,但在进行查询时遇到问题,我正在尝试这样做 2 天,所以我需要您的帮助。我必须从数据库中获取美国邮政编码,但由于美国在许多州和县都有同名城市,我已经通过state, county and city to the Facade(字符串格式为“州-县-市”),现在我必须进行查询通过使用标准 API。所以,逻辑是把邮政编码放在state = "state_name", county = "county_name" and city = "city_name“但我的努力没有给出任何结果。我调试了代码,它打破了"cq.where(...)"。通过教程,我认为这会起作用:(例如我传递了参数“ " 格式如下:HI - HAWAII - HONUMU 所以我需要 HONUMU 的邮政编码)

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery cq = cb.createQuery();

    for (String c : cities) {
        String[] b = c.split("-");
        String state= b[0].trim();
        String county= b[1].trim();
        String city = b[2].trim();


        Root<ZipCodes> zip = cq.from(ZipCodes.class);
        cq.select(zip);
        cq.where(cb.and(cb.equal(zip.<String>get("state"), state), 
                cb.equal(zip.<String>get("county"), county)), 
                cb.equal(zip.<String>get("city"), city));

        return em.createQuery(cq).getResultList();
4

1 回答 1

0

您应该尝试从比较字符串创建一个表达式;这边走:

    String state= b[0].trim();
    String county= b[1].trim();
    String city = b[2].trim();

    Expression<String> state_e = cb.literal(state);
    Expression<String> county_e = cb.literal(county);
    Expression<String> city_e = cb.literal(city);

    Root<ZipCodes> zip = cq.from(ZipCodes.class);
    cq.select(zip);
    cq.where(cb.and(cb.equal(zip.<String>get("state"), state_e), 
            cb.equal(zip.<String>get("county"), county_e)), 
            cb.equal(zip.<String>get("city"), city_e));

请注意带有下划线 e(_e) 的“新”表达式,如表达式中所示。希望能帮助到你!

于 2013-05-30T23:03:39.110 回答