Search code examples
javaliferay-6

Dynamic Query in Java date interval


I use Liferay 6.2, I try to select elements with a DynamicQuery.

I have a model Event that contains startDate and endDate columns.

ClassLoader cl = Event.class.getClassLoader();
DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(Event.class, cl);

I want to make a query to select rows of the table between startDate and endDate.

How i can do that?


Solution

  • You know that the function

    • Property.lt(Object) means lower than,
    • Property.le(Object) means lower or equals,
    • Property.gt(Object) means greater than and,
    • Property.ge(Object) means greater or equals?

    You can use this knowledge as follows:

    Date startDate = ...;
    Date endDate = ...;
    DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(Event.class, Event.class.getClassLoader());
    Property startDateProperty = PropertyFactoryUtil.forName("startDate");
    Property endDateProperty = PropertyFactoryUtil.forName("endDate");
    dynamicQuery.add(startDateProperty.ge(startDate));
    dynamicQuery.add(endDateProperty.le(endDate));
    

    This will find all events, that are completely between a given startDate and endDate. If you want to find all events that somehow overlap a given date range, you will need this:

    dynamicQuery.add(startDateProperty.lt(endDate));
    dynamicQuery.add(endDateProperty.gt(startDate));