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 回答