1

テーブル「Test」の列「testType」で個別のものを取得しようとしています。また、リストに「testType」と「testId」の両方を取得したいと考えています。そのために私はこれをやっていますが、それは私に重複した結果を与えて、distinct を適用しません。

どうすればこれを解決できますか?

Session session = sessionFactory.openSession();
Criteria crit = session.createCriteria(Test.class);
ProjectionList proList = Projections.projectionList();
proList.add(Projections.property("testType"));
proList.add(Projections.property("testId"));
crit.setProjection(proList);
crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
List rsList = crit.list();

前もって感謝します。

4

1 に答える 1

1

testType の個別の値を取得する

Session session = sessionFactory.openSession();
List results = session.createCriteria(Test.class);
    .setProjection(Projections.distinct(Projections.property("testType")))
    .list();

ただし、各タイプに多くの ID が存在する可能性があるため、ID を取得するために選択することはできません。

testId | testType
-----------------
1      | type1
2      | type2
3      | type1
4      | type2
6      | type3
7      | type3

何をSelect Distinct(testType), testid返す必要がありますか?

  1. (type1, 1), (type2, 2), (type3, 6)
  2. (type1, 3), (type2, 4), (type3, 7)
  3. (type1, 1), (type2, 4), (type3, 6)

1)

Session session = sessionFactory.openSession();
List results = session.createCriteria(Test.class);
    .setProjection(Projections.projectionList()
        .add(Projections.group(Projections.property("testType"))))
        .add(Projections.Min(Projections.property("testid")))))
    .list();

2)

Session session = sessionFactory.openSession();
List results = session.createCriteria(Test.class);
    .setProjection(Projections.projectionList()
        .add(Projections.group(Projections.property("testType"))))
        .add(Projections.Max(Projections.property("testid")))))
    .list();
于 2012-05-25T05:56:55.090 に答える