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 に答える