0

I am trying to implement search query using dynamic query I created dynamic query like this

DynamicQuery dynamicQuery=DynamicQueryFactoryUtil.forClass(OrderSubscription.class,PortletClassLoaderUtil.getClassLoader());
DynamicQuery dynamicQueryCount=DynamicQueryFactoryUtil.forClass(OrderSubscription.class,PortletClassLoaderUtil.getClassLoader());

Criterion criterion = RestrictionsFactoryUtil.like(DBConstants.OrderSubscription.ORDERNO, StringPool.PERCENT+searchKeyword+StringPool.PERCENT);
criterion = RestrictionsFactoryUtil.or(criterion, RestrictionsFactoryUtil.like(DBConstants.OrderSubscription.STATUS, StringPool.PERCENT+searchKeyword+StringPool.PERCENT));
criterion = RestrictionsFactoryUtil.or(criterion, RestrictionsFactoryUtil.like(DBConstants.OrderSubscription.ORDERDATE, StringPool.PERCENT+searchKeyword+StringPool.PERCENT));
criterion = RestrictionsFactoryUtil.or(criterion, RestrictionsFactoryUtil.like(DBConstants.OrderSubscription.PAYMENTSTATUS, StringPool.PERCENT+searchKeyword+StringPool.PERCENT));
criterion = RestrictionsFactoryUtil.or(criterion, RestrictionsFactoryUtil.like(DBConstants.OrderSubscription.ORDERSTATUS, StringPool.PERCENT+searchKeyword+StringPool.PERCENT));
criterion = RestrictionsFactoryUtil.or(criterion, RestrictionsFactoryUtil.like(DBConstants.OrderSubscription.ORDERID, StringPool.PERCENT+searchKeyword+StringPool.PERCENT));
criterion = RestrictionsFactoryUtil.or(criterion, RestrictionsFactoryUtil.like(DBConstants.OrderSubscription.PAYMENTTRANSACTIONTYPE, StringPool.PERCENT+searchKeyword+StringPool.PERCENT));
criterion = RestrictionsFactoryUtil.or(criterion, RestrictionsFactoryUtil.like(DBConstants.OrderSubscription.STARTDATE, StringPool.PERCENT+searchKeyword+StringPool.PERCENT));
criterion = RestrictionsFactoryUtil.or(criterion, RestrictionsFactoryUtil.like(DBConstants.OrderSubscription.CANCELDATE, StringPool.PERCENT+searchKeyword+StringPool.PERCENT));

dynamicQuery.add(junctionOR);
dynamicQueryCount.add(junctionOR);

List<OrderSubscription> orders = OrderSubscriptionLocalServiceUtil.dynamicQuery(dynamicQuery, start, end);

Now its throwing error of casting

at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date
at org.hibernate.type.descriptor.java.JdbcTimestampTypeDescriptor.unwrap(JdbcTimestampTypeDescriptor.java:42)
at org.hibernate.type.descriptor.sql.TimestampTypeDescriptor$1.doBind(TimestampTypeDescriptor.java:53)
at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:91)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:283)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:278)
at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1873)
at org.hibernate.loader.Loader.bindParameterValues(Loader.java:1844)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1716)
at org.hibernate.loader.Loader.doQuery(Loader.java:801)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
at org.hibernate.loader.Loader.doList(Loader.java:2542)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
at org.hibernate.loader.Loader.list(Loader.java:2271)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1716)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
at com.liferay.portal.dao.orm.hibernate.DynamicQueryImpl.list(DynamicQueryImpl.java:94)
at com.liferay.portal.dao.orm.hibernate.DynamicQueryImpl.list(DynamicQueryImpl.java:88)
at com.liferay.portal.service.persistence.impl.BasePersistenceImpl.findWithDynamicQuery(BasePersistenceImpl.java:166)
... 148 more
Jan 08, 2016 6:39:51 AM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet ordermanagment Servlet threw exception

summary :

i want to get list based on searched keyword from DB and my DB column type id datetime.

Can any one help me sort out this problem

Thanks Ravi Darji

Ravi Darji
  • 11
  • 5
  • I think, the problem is because you are setting `String` for `Date` parameter on line `criterion = RestrictionsFactoryUtil.or(criterion, RestrictionsFactoryUtil.like(DBConstants.OrderSubscription.ORDERDATE, StringPool.PERCENT+searchKeyword+StringPool.PERCENT));` Shouldn't it be a `Date` object? If yes, then consider `STARTDATE` and `CANCELDATE` as well. – Parkash Kumar Jan 08 '16 at 06:53
  • Well, what type of `DBConstants.OrderSubscription.ORDERDATE` is actually? – Parkash Kumar Jan 08 '16 at 06:54
  • it is the keyword which i getting from search field so it can not be date always. – Ravi Darji Jan 08 '16 at 06:57
  • It is `String` obviously. I just confirmed from API that method `like`'s first parameter is a `String` type. – Parkash Kumar Jan 08 '16 at 06:57
  • First, try to remove lines involving date parameters and check if it works, then add condition to check if `searchKeyword` is a date string, convert it to `Date` object first, then pass to `like` method. – Parkash Kumar Jan 08 '16 at 06:58
  • after removing that line of code it is working fine but as i said search keyword is coming from search input field and on each key up i am firing dynamic query so can you tell me how to check that string is date or not? – Ravi Darji Jan 08 '16 at 07:32
  • Can keyword be a String date looking from user prospective? – Parkash Kumar Jan 08 '16 at 07:44
  • Also, what do you have necessity to add `like` condition on `Date` columns? – Parkash Kumar Jan 08 '16 at 07:45

0 Answers0