我正在使用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();
答案 0 :(得分: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)的“新”表达式,如表达式中所示。希望它能帮助你!