List of usage examples for org.hibernate.internal CriteriaImpl list
@Override
public List list() throws HibernateException
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]); } } }