Search code examples
hibernateprojection

How to Access Columns generated by projection criteria in Hibernate(pseudo columns)?


This is criteria which returns 6 columns.
ProjectionList projList = Projections.projectionList();

    projList.add(Projections.property("se.ticker"),"ticker");
    projList.add(Projections.property("cl.firstName"),"firstName");
    projList.add(Projections.property("cl.middleName"),"middleName");
    projList.add(Projections.property("tr.client"),"client");
    projList.add(Projections.sum("tr.cumulativeQty"),"cumulativeQty");
    projList.add(Projections.sum("tr.cumulativeBalance"),"cumulativeBalance");
    projList.add(Projections.groupProperty("tr.securityId"));

    Criteria criteria = createEntityCriteria(TransactionDetails.class, "tr")
            .createAlias("tr.client", "cl")
            .createAlias("tr.security", "se")
            .add(Restrictions.eq("cl.id", clientId))
            .setProjection(projList);




    return (List<TransactionDetails>) criteria.list();

How to access column details(data with column). I have given the alias name but its of no use. Please Suggest me the way to access the column data.


Solution

  • I used Iterator to get the data. Its working now.

    transactionDetailsList = transactionDetailsDao.getClientHoldingsBySecurityIdClientId(securityId, clientId);

            List list = transactionDetailsList;
            Iterator it = list.iterator();
            if (!it.hasNext()) {
                System.out.println("No any data!");
            } else {
                while (it.hasNext()) {
                    TransactionDetailsDto transactionDetailsDto = new TransactionDetailsDto();
                    Object[] row = (Object[]) it.next();
                    int count=0;
                    for (int i = 0; i < row.length; i++) {
    
                        switch (i) {
                            case 0:
                                transactionDetailsDto.setClientMasterId(Long.valueOf(row[i].toString()));
                                Client client = clientDAO.load(transactionDetailsDto.getClientMasterId());
                                transactionDetailsDto.setClientDto(new ClientTransformer().transform(client));
                                break;
                                    }
                          }
    

    }