2012-05-25 63 views
1

我想在表「測試」中的我的列「testType」上得到獨特的。 另外我想在我的列表中同時獲得「testType」和「testId」。爲此,我正在做這個 但它不應用獨特的,給我重複的結果。hiebrnate投影與不同

任何想法如何解決這個問題?

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

得到testType

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

的不同的值,但得到的ID,以及你不能選擇它,因爲有可能是對每種類型的許多IDS,如:

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

Select Distinct(testType), testid應該返回什麼?

  1. (TYPE1,1),(類型2,2),(3型,6)
  2. (TYPE1,3),(類型2,4),(3型,7)
  3. (TYPE1,1 ),(類型2,4),(3型,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();