SELECT CITIES。* from CITIES,CITIES.STATE_ID IN(SELECT STATES.STATE_ID from STATES WHATES STATES.COUNTRY_ID = 78)
以下是课程
Integer id;
String name;
Integer id;
Integer countryId;
String name;
Integer id;
Integer stateId;
String name;
我正在努力让所有属于某个国家/地区的城市(例如,那个拥有其ID = 78的城市)
答案 0 :(得分:3)
Criteria api适用于关系映射。如果城市,州或国家之间没有任何关系,则不能使用上述解决方案之类的内容。我有两个建议,首先你可以使用两个标准。
DetachedCriteria ownerCriteria = DetachedCriteria.forClass(State.class);
ownerCriteria.setProjection(Property.forName("id"));
ownerCriteria.add(Restrictions.eq("countryId", countryParam));
Criteria criteria = getSession().createCriteria(City.class);
criteria.add(Property.forName("stateId").in(ownerCriteria));
第二个是使用带交叉连接的hql。看看here。
最后我认为用本机sql编写此查询会更好。 ;)
答案 1 :(得分:0)
当您不显示映射和/或域类时很难说。 但是,您不需要此查询的子查询(尽管它将返回相同的结果,并且完全没问题。)
你可以这样做:
ICriteria crit = session.CreateCriteria <City>();
crit.CreateAlias ("State", "s");
crit.CreateAlias ("s.Country", "cntry");
crit.Add (Expression.Eq ("cntry.Id", 78));
var results = crit.List<City>();