0

我有一张像这样的桌子:

Users (user_id, name, age, country_id)

现在我想要一个像这样的查询:

SELECT *
FROM users
where country_id in (1,2,3,4,5)

用户没有关系,我只想在没有任何关联的情况下执行此操作。

我想用标准查询来做到这一点。

我看到了限制,但不确定它是否有 where in 子句:

sessionFactory.getCurrentSession().createCriteria(User.class)
  .add(Restrictions.eq("country_id", countryId)
  .list();

所以我的改变是我有一个需要通过的国家 ID 列表(List countryIds)。

4

3 回答 3

3

你想要'country_id in (...)'吗?

如果是,那么:

sessionFactory.getCurrentSession().createCriteria(User.class)
 .add(Restrictions.in("countryId", countryIds)
 .list();

我还使用了“countryId” - 在标准中您使用属性名称,而不是表列名称。

于 2012-04-08T21:53:12.523 回答
1
List<Integer> countryIds=//get data from either a query or criteria

Criteria c = // obtain criteria from session

Disjunction disJunction = Restrctions.disjunction();
disJunction .add(Restrictions.in("country_id", countryIds));
c.add(disJunction); 
于 2012-04-08T21:43:34.917 回答
0

尤金的解决方案是最适合的。如果要匹配多个可能的国家/地区 ID,请使用 Restrictions.in。

您还可以使用 Property.forName(...).in(...),例如:

sessionFactory.getCurrentSession().createCriteria(User.class)
    .add(Property.forName("countryId").in(countryIds))
    .list();
于 2012-04-09T12:51:51.820 回答