2014-09-02 13 views
0

我想在我的UserAccount類只檢索某些列,所以我有下面的代碼:如何正確使用setProjection?

UserAccount aUser = (UserAccount)currentSession().createCriteria(UserAccount.class) 
         /* .setProjection(Projections.projectionList() 
            .add(Projections.property("id")) 
            .add(Projections.property("username")) 
            .add(Projections.property("email")) 
            .add(Projections.property("displayname"))) */ 
          .add(Restrictions.eq("email", email)) 
          .add(Restrictions.eq("password", password)) 
          .add(Restrictions.eq("enabled", true)) 
          .add(Restrictions.eq("role", Role.CUSTOMER)) 
          .uniqueResult(); 
    System.out.println(aUser); 
    return aUser; 

我得到的回報零。但是,如果我註釋掉setProjections,我將得到所有屬性的用戶。如何在這種情況下正確使用setProjection?

回答

0

它返回一個Object數組,因此代碼應該是:

Object[] rows = (Object[]) session 
     .createCriteria(UserAccount.class) 
     .setProjection(
       Projections.projectionList() 
         .add(Projections.property("id")) 
         .add(Projections.property("username")) 
         .add(Projections.property("email")) 
         .add(Projections.property("displayname"))) 
     .add(Restrictions.eq("email", email)) 
     .add(Restrictions.eq("password", password)) 
     .add(Restrictions.eq("enabled", true)) 
     .add(Restrictions.eq("role", Role.CUSTOMER)) 
     .uniqueResult(); 
+0

謝謝。它完美的作品 – 2014-09-02 05:29:56

0

有凸起我們應該用結果變壓器走樣

UserAccount aUser = (UserAccount)currentSession() 
    // FROM 
    .createCriteria(UserAccount.class) 
    // WHERE 
    .add(Restrictions.eq("email", email)) 
    .add(Restrictions.eq("password", password)) 
    .add(Restrictions.eq("enabled", true)) 
    .add(Restrictions.eq("role", Role.CUSTOMER)) 
    // SELECT with alias 
    .setProjection(Projections.projectionList() 
     .add(Projections.property("id"),"id")    // alias is a must for 
     .add(Projections.property("username"),"username") // result transformer 
     .add(Projections.property("email"),"email") 
     .add(Projections.property("displayname"),"displayname") 
    ) 
    // here we go - this will convert projection into entity 
    .setResultTransformer(Transformers.aliasToBean(UserAccount.class)) 
    .uniqueResult(); 

檢查:

+0

感謝您的代碼。 – 2014-09-02 05:34:22

+0

哇,我明白了,你更喜歡對象[],怪異......無論如何欣賞Hibernate;) – 2014-09-02 05:39:30