我试图在表“ 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();


提前致谢。

最佳答案

获得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应该返回什么?


(type1,1),(type2,2),(type3,6)
(type1、3),(type2、4),(type3、7)
(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();

10-08 00:27