我只想检索UserAccount类中的某些列,所以我有以下代码:
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?
它返回一个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();