From: <mup...@us...> - 2008-03-05 17:09:03
|
Revision: 718 http://openutils.svn.sourceforge.net/openutils/?rev=718&view=rev Author: muppet68 Date: 2008-03-05 09:08:56 -0800 (Wed, 05 Mar 2008) Log Message: ----------- Aggiunto metodo per ritornare solo sottoinsieme di propriet?\195?\160 di un oggetto Modified Paths: -------------- trunk/openutils-bshd5/src/main/java/it/openutils/dao/hibernate/HibernateDAO.java trunk/openutils-bshd5/src/main/java/it/openutils/dao/hibernate/HibernateDAOImpl.java Modified: trunk/openutils-bshd5/src/main/java/it/openutils/dao/hibernate/HibernateDAO.java =================================================================== --- trunk/openutils-bshd5/src/main/java/it/openutils/dao/hibernate/HibernateDAO.java 2008-03-03 14:36:22 UTC (rev 717) +++ trunk/openutils-bshd5/src/main/java/it/openutils/dao/hibernate/HibernateDAO.java 2008-03-05 17:08:56 UTC (rev 718) @@ -141,7 +141,22 @@ */ List<T> findFiltered(final T filter, final Order[] customOrder, final Map<String, FilterMetadata> metadata, final int maxResults, final int page, List<Criterion> additionalCriteria); + + /** + * Return properties from all objects related to the implementation of this DAO filtered using properties of the provided instance. + * @param filter an instance of the object with the properties you whish to filter on. + * @param customOrder order criterias + * @param metadata filter metadata + * @param maxResults maximum number of results + * @param page result page (first result is maxResults * page) + * @param additionalCriteria additional criteria + * @param properties properties to be returned + * @return list of properties from all objects + */ + List<?> findFilteredProperties(final T filter, final Order[] customOrder, final Map<String, FilterMetadata> metadata, + final int maxResults,final int page, List<Criterion> additionalCriteria, List<String> properties); + /** * Return all objects related to the implementation of this DAO filtered using properties of the provided instance. * @param filter an instance of the object with the properties you whish to filter on. Modified: trunk/openutils-bshd5/src/main/java/it/openutils/dao/hibernate/HibernateDAOImpl.java =================================================================== --- trunk/openutils-bshd5/src/main/java/it/openutils/dao/hibernate/HibernateDAOImpl.java 2008-03-03 14:36:22 UTC (rev 717) +++ trunk/openutils-bshd5/src/main/java/it/openutils/dao/hibernate/HibernateDAOImpl.java 2008-03-05 17:08:56 UTC (rev 718) @@ -20,6 +20,9 @@ import org.hibernate.criterion.CriteriaSpecification; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Order; +import org.hibernate.criterion.ProjectionList; +import org.hibernate.criterion.Projections; +import org.hibernate.criterion.Property; import org.hibernate.type.Type; import org.springframework.aop.framework.AopContext; import org.springframework.orm.hibernate3.HibernateCallback; @@ -331,7 +334,7 @@ /** * {@inheritDoc} */ - @SuppressWarnings("unchecked") + @SuppressWarnings("unchecked") public List<T> findFiltered(T filter, Order[] customOrder, Map<String, FilterMetadata> metadata, int maxResults, int page, List<Criterion> additionalCriteria) { @@ -339,10 +342,40 @@ .getDefaultOrder(); return (List<T>) getHibernateTemplate().execute( - new HibernateCallbackForExecution(filter, page, maxResults, metadata, orderProperties, additionalCriteria)); + new HibernateCallbackForExecution( + filter, + page, + maxResults, + metadata, + orderProperties, + additionalCriteria, + null)); } /** + * + * {@inheritDoc} + */ + @SuppressWarnings("unchecked") + public List<?> findFilteredProperties(final T filter, final Order[] customOrder, + final Map<String, FilterMetadata> metadata, final int maxResults, final int page, + List<Criterion> additionalCriteria, List<String> properties) + { + final Order[] orderProperties = customOrder != null && customOrder.length > 0 ? customOrder : this + .getDefaultOrder(); + + return (List< ? >) getHibernateTemplate().execute( + new HibernateCallbackForExecution( + filter, + page, + maxResults, + metadata, + orderProperties, + additionalCriteria, + properties)); + } + + /** * Return the specific Object class that will be used for class-specific implementation of this DAO. * @return the reference Class */ @@ -550,6 +583,11 @@ private final Map<String, FilterMetadata> metadata; /** + * + */ + private final List<String> properties; + + /** * */ private final Order[] orderProperties; @@ -569,7 +607,8 @@ int maxResults, Map<String, FilterMetadata> metadata, Order[] orderProperties, - List<Criterion> additionalCriteria) + List<Criterion> additionalCriteria, + List<String> properties) { this.filter = filter; this.page = page; @@ -577,6 +616,7 @@ this.metadata = metadata; this.orderProperties = orderProperties; this.additionalCriteria = additionalCriteria; + this.properties = properties; } public Object doInHibernate(Session ses) throws HibernateException @@ -604,6 +644,17 @@ crit.add(criterion); } } + if (properties != null) + { + ProjectionList projectionList = Projections.projectionList(); + + for (String property : properties) + { + projectionList.add(Property.forName(property)); + } + + crit.setProjection(projectionList); + } return crit.list(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |