具有明显的休眠投影

时间:2012-05-25 05:28:47

标签: java hibernate

我正试图在我的专栏中获得明确的#34; testType"在表格中#34;测试"。 我也希望得到" testType"和" testId"在我的清单中。为此,我这样做 但它并没有应用不同的,给我重复的结果。

我知道如何解决这个问题?

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();

提前致谢。

1 个答案:

答案 0 :(得分:1)

获取testType的不同值

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

但是要获得id,你也不能选择它,因为每个Type可能有很多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)
  4. 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();