0

Criteria API で紹介していますが、クエリの作成に問題があります。これを 2 日間やろうとしているので、助けが必要です。データベースから米国の郵便番号を取得する必要がありますが、米国には多くの州と郡に同じ名前の都市があるため、合格しましたstate, county and city to the Facade(文字列は「州 - 郡 - 市」のようにフォーマットされています)。 Criteria 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

比較文字列から Expression を作成してみてください。こちらです:

    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));

Expressions のようにアンダースコア e(_e) が付いた「新しい」式に注意してください。それが役に立てば幸い!

于 2013-05-30T23:03:39.110 に答える