如何使用Hibernate的HQL和Criteria api表达此查询?

选择CITIES。*来自CITIES的CITIES.STATE_ID(来自STATES WHATES STATES.COUNTRY_ID = 78的STATES.STATE_ID) 编辑: 这是课程 Country.java
Integer id;
String name;
State.java
Integer id;
Integer countryId;
String name;
City.java
Integer id;
Integer stateId;
String name;
我想要获得属于某个国家的所有城市(例如,那个id = 78的城市)     
已邀请:
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。看看这里。 最后我认为最好用本机sql编写这个查询。 ;)     
当您不显示映射和/或域类时很难说。 但是,您不需要此查询的子查询(尽管它将返回相同的结果,并且完全可以)。 你可以这样做:
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>();
    

要回复问题请先登录注册