Example usage for org.hibernate.internal CriteriaImpl list

List of usage examples for org.hibernate.internal CriteriaImpl list

Introduction

In this page you can find the example usage for org.hibernate.internal CriteriaImpl list.

Prototype

@Override
    public List list() throws HibernateException 

Source Link

Usage

From source file:org.babyfish.hibernate.model.loader.HibernateObjectModelScalarLoader.java

License:Open Source License

@SuppressWarnings("unchecked")
private void loadScalarsImpl(Collection<ObjectModel> objectModels, int[] scalarPropertyIds) {
    boolean batch = objectModels.size() > 1;
    ObjectModel firstObjectModel = objectModels.iterator().next();
    JPAObjectModelMetadata jpaObjectModelMetadata = (JPAObjectModelMetadata) firstObjectModel
            .getObjectModelMetadata();//  www  .j  ava2s .  c o m
    JPAScalarProperty entityIdProperty = jpaObjectModelMetadata.getEntityIdProperty();
    Map<Object, ObjectModel> idMap = new LinkedHashMap<>();
    for (ObjectModel objectModel : objectModels) {
        idMap.put(objectModel.getScalar(entityIdProperty.getId()), objectModel);
    }

    CriteriaImpl criteria = new CriteriaImpl(jpaObjectModelMetadata.getOwnerClass().getName(), session);
    ProjectionList projectionList = Projections.projectionList();
    if (batch) {
        String ownerIdPropertyName = entityIdProperty.getOwnerProperty().getName();
        projectionList.add(Projections.property(ownerIdPropertyName));
    }
    for (int scalarPropertyId : scalarPropertyIds) {
        String ownerPropertyName = jpaObjectModelMetadata.getScalarProperty(scalarPropertyId).getOwnerProperty()
                .getName();
        projectionList.add(Projections.property(ownerPropertyName));
    }
    if (batch) {
        criteria.add(Restrictions.in(entityIdProperty.getOwnerProperty().getName(), idMap.keySet()));
    } else {
        criteria.add(Restrictions.eq(entityIdProperty.getOwnerProperty().getName(),
                idMap.keySet().iterator().next()));
    }
    criteria.setProjection(projectionList).setResultTransformer(new ResultTransformer() {

        private static final long serialVersionUID = -1387181124646452221L;

        @Override
        public Object transformTuple(Object[] tuple, String[] aliases) {
            return tuple;
        }

        @SuppressWarnings("rawtypes")
        @Override
        public List transformList(List collection) {
            return collection;
        }
    });
    List<Object[]> tuples;
    FlushMode oldFlushMode = session.getFlushMode();
    session.setFlushMode(FlushMode.MANUAL);
    try {
        tuples = (List<Object[]>) criteria.list();
    } finally {
        session.setFlushMode(oldFlushMode);
    }
    if (batch) {
        for (Object[] tuple : tuples) {
            ObjectModel objectModel = idMap.get(tuple[0]);
            for (int i = scalarPropertyIds.length - 1; i >= 0; i--) {
                objectModel.setScalar(scalarPropertyIds[i], tuple[i + 1]);
            }
        }
    } else {
        Object[] firstTuple = tuples.get(0);
        for (int i = scalarPropertyIds.length - 1; i >= 0; i--) {
            firstObjectModel.setScalar(scalarPropertyIds[i], firstTuple[i]);
        }
    }
}