一尘不染

如何正确使用setProjection?

hibernate

我只想检索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?


阅读 433

收藏
2020-06-20

共1个答案

一尘不染

它返回一个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();
2020-06-20