Search This Blog

Wednesday 23 April 2014

Using DynamicQuery on multiples Entities in Liferay

Here's an example where i have used Dynamic Query to query two different Entities in Liferay .

Entity1 = ResourceBookingMapping
Entity1 = PromotionalItemsBooking
Also, see carefully the applicantsCriterion where lies the core-logic ..

Refer the complete code-extract below :
------------------------------------------------------------------------------------------------------------------------------------
List<ResourceBookingMapping> resourceBookingList = new ArrayList<ResourceBookingMapping>();
Criterion combineCriterion = null;
DynamicQuery query = DynamicQueryFactoryUtil.forClass(ResourceBookingMapping.class);
DynamicQuery applicantQuery = DynamicQueryFactoryUtil.forClass(PromotionalItemsBooking.class)
.setProjection(ProjectionFactoryUtil.property("referenceNo"))
.add(RestrictionsFactoryUtil.eq("userId", applicantId));
Criterion dateRangeCriterion = RestrictionsFactoryUtil.between("createDate",
                                                                                                new java.sql.Timestamp( date1.getTime()), 
                                                                                               new java.sql.Timestamp(date2.getTime()));
Criterion itemsCriterion = RestrictionsFactoryUtil.eq("itemId",itemId);
Criterion applicantsCriterion = PropertyFactoryUtil.forName("referenceNo").in(applicantQuery);
Criterion itemsUnionApplicantCriterion = RestrictionsFactoryUtil.and(itemsCriterion ,                                                                                                                                                                                                 applicantsCriterion);
if(applicantId>0 && itemId>0){
System.out.println(" Criterion -PromotionalItemsBooking :: itemId>0 && applicantId>0 ");
combineCriterion = RestrictionsFactoryUtil.and(dateRangeCriterion, itemsUnionApplicantCriterion);
}else if(applicantId>0){
System.out.println(" Criterion -PromotionalItemsBooking :: applicantId>0 ");
combineCriterion = RestrictionsFactoryUtil.and(applicantsCriterion, dateRangeCriterion);
query.add(combineCriterion);
}else if(itemId>0){
System.out.println(" Criterion -PromotionalItemsBooking :: itemId>0 ");
combineCriterion = RestrictionsFactoryUtil.and(itemsCriterion, dateRangeCriterion);
query.add(combineCriterion);
}else{
System.out.println(" Criterion -PromotionalItemsBooking :: only Date-Range Applicable ");
query.add(dateRangeCriterion);
}
resourceBookingList = ResourceBookingMappingLocalServiceUtil.dynamicQuery(query);
------------------------------------------------------------------------------------------------------------------------------------

No comments:

Post a Comment