Example usage for org.hibernate.criterion Projections distinct

List of usage examples for org.hibernate.criterion Projections distinct

Introduction

In this page you can find the example usage for org.hibernate.criterion Projections distinct.

Prototype

public static Projection distinct(Projection projection) 

Source Link

Document

Create a distinct projection from a projection.

Usage

From source file:com.evolveum.midpoint.repo.sql.query.custom.ShadowQueryWithDisjunction.java

License:Apache License

@Override
public RQuery createQuery(ObjectQuery objectQuery, Class<? extends ObjectType> type,
        Collection<SelectorOptions<GetOperationOptions>> options, boolean countingObjects, Session session) {

    DetachedCriteria c1 = DetachedCriteria.forClass(ClassMapper.getHQLTypeClass(ShadowType.class), "s");
    c1.createCriteria("strings", "s1", JoinType.LEFT_OUTER_JOIN);

    ParsedQuery parsedQuery = parse(objectQuery);
    Conjunction conjunction = Restrictions.conjunction();
    conjunction//from ww  w  .j a  va  2  s .  co m
            .add(Restrictions.eq("resourceRef.targetOid", parsedQuery.refFilter.getValues().get(0).getOid()));
    Disjunction disjunction = Restrictions.disjunction();
    disjunction.add(createAttributeEq(parsedQuery.eqUidFilter,
            parsedQuery.eqUidFilter.getPath().lastNamed().getName()));
    disjunction.add(createAttributeEq(parsedQuery.eqNameFilter, SchemaConstantsGenerated.ICF_S_NAME));
    conjunction.add(disjunction);
    c1.add(conjunction);

    if (countingObjects) {
        c1.setProjection(Projections.countDistinct("s.oid"));
        return new RQueryCriteriaImpl(c1.getExecutableCriteria(session));
    }

    c1.setProjection(Projections.distinct(Projections.property("s.oid")));

    Criteria cMain = session.createCriteria(ClassMapper.getHQLTypeClass(ShadowType.class), "o");
    cMain.add(Subqueries.propertyIn("oid", c1));

    if (objectQuery != null && objectQuery.getPaging() != null) {
        cMain = updatePagingAndSorting(cMain, type, objectQuery.getPaging());
    }

    ProjectionList projections = Projections.projectionList();
    projections.add(Projections.property("fullObject"));
    projections.add(Projections.property("stringsCount"));
    projections.add(Projections.property("longsCount"));
    projections.add(Projections.property("datesCount"));
    projections.add(Projections.property("referencesCount"));
    projections.add(Projections.property("polysCount"));
    projections.add(Projections.property("booleansCount"));

    cMain.setProjection(projections);

    cMain.setResultTransformer(GetObjectResult.RESULT_TRANSFORMER);
    return new RQueryCriteriaImpl(cMain);
}

From source file:com.evolveum.midpoint.repo.sql.query.restriction.OrgRestriction.java

License:Apache License

@Override
public Criterion interpret(OrgFilter filter) throws QueryException {
    if (filter.isRoot()) {
        //         Criteria pCriteria = getInterpreter().getCriteria(null);
        DetachedCriteria dc = DetachedCriteria.forClass(ROrgClosure.class);
        String[] strings = new String[1];
        strings[0] = "descendant.oid";
        Type[] type = new Type[1];
        type[0] = StringType.INSTANCE;/*from  w w  w.  jav  a  2 s  .co m*/
        dc.setProjection(Projections.sqlGroupProjection("descendant_oid",
                "descendant_oid having count(descendant_oid)=1", strings, type));
        //         pCriteria.add(Subqueries.in("this.oid", dc));
        return Subqueries.propertyIn("oid", dc);
        //         Query rootOrgQuery = session.createQuery("select org from ROrg as org where org.oid in (select descendant.oid from ROrgClosure group by descendant.oid having count(descendant.oid)=1)");
    }

    if (filter.getOrgRef() == null) {
        throw new QueryException("No organization reference defined in the search query.");
    }

    if (filter.getOrgRef().getOid() == null) {
        throw new QueryException(
                "No oid specified in organization reference " + filter.getOrgRef().debugDump());
    }

    DetachedCriteria detached;
    switch (filter.getScope()) {
    case ONE_LEVEL:
        detached = DetachedCriteria.forClass(RParentOrgRef.class, "p");
        detached.setProjection(Projections.distinct(Projections.property("p.ownerOid")));
        detached.add(Restrictions.eq("p.targetOid", filter.getOrgRef().getOid()));
        break;
    case SUBTREE:
    default:
        detached = DetachedCriteria.forClass(ROrgClosure.class, "cl");
        detached.setProjection(Projections.distinct(Projections.property("cl.descendantOid")));
        detached.add(Restrictions.eq("cl.ancestorOid", filter.getOrgRef().getOid()));
        detached.add(Restrictions.ne("cl.descendantOid", filter.getOrgRef().getOid()));
    }
    String mainAlias = getContext().getAlias(null);
    return Subqueries.propertyIn(mainAlias + ".oid", detached);
}

From source file:com.evolveum.midpoint.repo.sql.QueryInterpreterTest.java

License:Apache License

@Test
public void queryOrgTreeFindOrgs() throws Exception {
    Session session = open();/*w  w  w.jav  a 2s  .c  o  m*/

    try {

        Criteria main = session.createCriteria(ROrg.class, "o");
        ProjectionList projections = Projections.projectionList();
        addFullObjectProjectionList("o", projections, false);
        main.setProjection(projections);

        DetachedCriteria detached = DetachedCriteria.forClass(RParentOrgRef.class, "p");
        detached.setProjection(Projections.distinct(Projections.property("p.ownerOid")));
        detached.add(Restrictions.eq("p.targetOid", "some oid"));

        main.add(Subqueries.propertyIn("o.oid", detached));
        main.addOrder(Order.asc("o.name.orig"));

        String expected = HibernateToSqlTranslator.toSql(main);

        OrgFilter orgFilter = OrgFilter.createOrg("some oid", OrgFilter.Scope.ONE_LEVEL);
        ObjectQuery objectQuery = ObjectQuery.createObjectQuery(orgFilter);
        objectQuery
                .setPaging(ObjectPaging.createPaging(null, null, ObjectType.F_NAME, OrderDirection.ASCENDING));

        String real = getInterpretedQuery(session, OrgType.class, objectQuery);

        LOGGER.info("exp. query>\n{}\nreal query>\n{}", new Object[] { expected, real });

        OperationResult result = new OperationResult("query org structure");
        repositoryService.searchObjects(OrgType.class, objectQuery, null, result);

        AssertJUnit.assertEquals(expected, real);
    } finally {
        close(session);
    }
}

From source file:com.evolveum.midpoint.repo.sql.QueryInterpreterTest.java

License:Apache License

@Test
public void test310QueryNameAndOrg() throws Exception {
    Session session = open();//from w  ww  . j a  va2  s . c om

    try {
        DetachedCriteria detached = DetachedCriteria.forClass(ROrgClosure.class, "cl");
        detached.setProjection(Projections.distinct(Projections.property("cl.descendantOid")));
        detached.add(Restrictions.eq("cl.ancestorOid", "1234"));
        detached.add(Restrictions.ne("cl.descendantOid", "1234"));

        Criteria main = session.createCriteria(RUser.class, "u");
        String mainAlias = "u";

        ProjectionList projections = Projections.projectionList();
        projections.add(Projections.property("fullObject"));

        projections.add(Projections.property("stringsCount"));
        projections.add(Projections.property("longsCount"));
        projections.add(Projections.property("datesCount"));
        projections.add(Projections.property("referencesCount"));
        projections.add(Projections.property("polysCount"));

        main.setProjection(projections);

        Conjunction c = Restrictions.conjunction();
        c.add(Restrictions.and(Restrictions.eq("u.name.orig", "cpt. Jack Sparrow"),
                Restrictions.eq("u.name.norm", "cpt jack sparrow")));
        c.add(Subqueries.propertyIn(mainAlias + ".oid", detached));
        main.add(c);

        main.addOrder(Order.asc("u.name.orig"));

        String expected = HibernateToSqlTranslator.toSql(main);

        EqualFilter eqFilter = EqualFilter.createEqual(ObjectType.F_NAME, ObjectType.class, prismContext, null,
                new PolyString("cpt. Jack Sparrow", "cpt jack sparrow"));

        OrgFilter orgFilter = OrgFilter.createOrg("12341234-1234-1234-1234-123412341234");

        ObjectQuery query = ObjectQuery.createObjectQuery(AndFilter.createAnd(eqFilter, orgFilter));
        query.setPaging(ObjectPaging.createPaging(null, null, ObjectType.F_NAME, OrderDirection.ASCENDING));

        String real = getInterpretedQuery(session, UserType.class, query);

        LOGGER.info("exp. query>\n{}\nreal query>\n{}", new Object[] { expected, real });
        AssertJUnit.assertEquals(expected, real);
    } finally {
        close(session);
    }
}

From source file:com.fich.wafproject.dao.UserDaoImpl.java

public List<Users> findAll(int pageNumber, String[] targets, String[] names, String[] values,
        boolean pagination) {
    int pageSize = 4;
    Criteria crit = this.createEntityCriteria();
    crit.setProjection(Projections.distinct(Projections.property("id")));
    String dateFrom = "", dateTo = "", targetDate = "";
    if (names != null) {
        for (String alias : names) {
            crit.createAlias(alias, alias);
        }//from w ww.  ja  v  a  2s . c  om
    }
    int count = 0;
    if (values != null) {
        for (String value : values) {
            if (!value.equals("") && value != null) {
                if (targets[count].contains("date")) {
                    if (dateFrom != "") {
                        dateTo = value;
                    } else {
                        dateFrom = value;
                        targetDate = targets[count];
                    }
                } else {
                    crit.add(Restrictions.like(targets[count], "%" + value + "%"));
                }
            }
            count++;
        }
        if (targetDate != "") {
            if (dateFrom != "" && dateTo == "") {
                dateTo = dateFrom;
            }
            DateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
            try {
                Date dateF = format.parse(dateFrom);
                Date dateT = format.parse(dateTo);
                crit.add(Restrictions.between(targetDate, dateF, dateT));
            } catch (ParseException ex) {
                Logger.getLogger(UserDaoImpl.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    if (pagination) {
        crit.setFirstResult((pageNumber - 1) * pageSize);
        crit.setMaxResults(pageSize);
    }
    List<Users> users = new ArrayList<Users>();
    for (Object idEvent : crit.list()) {
        //            System.out.println(idEvent);
        users.add(this.findById((Long) idEvent));
    }
    return (List<Users>) users;
}

From source file:com.fich.wafproject.dao.UserHistoryDaoImpl.java

@SuppressWarnings("unchecked")
public List<UsersHistory> findAll(int pageNumber) {
    int pageSize = 6;
    Criteria crit = createEntityCriteria();
    crit.setProjection(Projections.distinct(Projections.property("id")));
    crit.setFirstResult((pageNumber - 1) * pageSize);
    crit.setMaxResults(pageSize);/*from   w  ww  . ja va 2  s.  co m*/

    List<UsersHistory> events = new ArrayList<UsersHistory>();
    for (Object idUsersHistory : crit.list()) {
        //            System.out.println(idUsersHistory);
        events.add(this.findById((Long) idUsersHistory));
    }
    return events;
}

From source file:com.fich.wafproject.dao.UserHistoryDaoImpl.java

public List<UsersHistory> filter(String[] values, String[] names, String[] targets, int pageNumber,
        String role) {/*from ww w . j  a v  a2  s  .  c om*/
    int pageSize = 6;
    int count = 0;
    boolean filterByUserProperty = false, filterByUserName = false;
    Criteria crit = this.createEntityCriteria();//.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
    crit.setProjection(Projections.distinct(Projections.property("id")));
    String dateFrom = "", dateTo = "", targetDate = "";
    if (names != null) {
        for (String alias : names) {
            crit.createAlias(alias, alias);
            if (alias.equals("user"))
                filterByUserProperty = true;
        }
    }
    if (!filterByUserProperty && !role.equals(""))
        crit.createAlias("user", "user");
    if (values != null) {
        for (String value : values) {
            if (!value.equals("") && value != null) {
                if (targets[count].contains("date")) {
                    if (dateFrom != "") {
                        dateTo = value;
                    } else {
                        dateFrom = value;
                        targetDate = targets[count];
                    }
                } else {
                    if (targets[count].contains("userName"))
                        filterByUserName = true;
                    crit.add(Restrictions.like(targets[count], "%" + value + "%"));
                }
            }
            count++;
        }
        if (targetDate != "") {
            if (dateFrom != "" && dateTo == "") {
                dateTo = dateFrom;
            }
            DateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
            try {
                Date dateF = format.parse(dateFrom);
                Date dateT = format.parse(dateTo);
                crit.add(Restrictions.between(targetDate, dateF, dateT));
            } catch (ParseException ex) {
                Logger.getLogger(UserHistoryDaoImpl.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    if (!filterByUserName && !role.equals(""))
        crit.add(Restrictions.like("user.userName", role));
    crit.setFirstResult((pageNumber - 1) * pageSize);
    crit.setMaxResults(pageSize);
    List<UsersHistory> events = new ArrayList<UsersHistory>();
    for (Object idEvent : crit.list()) {
        events.add(this.findById((Long) idEvent));
    }
    return (List<UsersHistory>) events;
}

From source file:com.hrms.manager.DeductionRuleManager.java

public List<String> getGradeList() {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction t = session.beginTransaction();
    List<String> le = new ArrayList<>();
    Criteria c = session.createCriteria(EmployeeProfile.class);
    c.setProjection(Projections.distinct(Projections.property("empGrade")));
    List emp = c.list();//from www.j a  v a  2s.co  m
    System.out.println("--------------->" + emp);
    return emp;
}

From source file:com.hrms.manager.HRMSManager.java

public List<String> getQuarters()

{
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction t = session.beginTransaction();
    Criteria c = session.createCriteria(ResidentialQuarters.class);
    c.setProjection(Projections.distinct(Projections.property("quarterType")));
    List emp = c.list();/*from w  ww  .  j  a v a2  s  .com*/
    return emp;
}

From source file:com.hrms.manager.LoanAppManager.java

public List<String> getEmpGradeList() {

    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction t = session.beginTransaction();
    List<String> le = new ArrayList<>();
    Criteria c = session.createCriteria(EmployeeProfile.class);
    c.setProjection(Projections.distinct(Projections.property("empGrade")));

    List emp = c.list();/*from w  w  w .j  a  va 2  s .  c  om*/
    System.out.println("---------------->" + emp);
    return emp;
}