灵活搜索查询中的日期减法

Date subtraction in FlexibleSerchQuery

我正在尝试编写一个 FlexibleSearchQuery 来查找连接到 hsqldb 数据库的 hybris 中超过 30 天的记录,但下面的代码抛出

org.hsqldb.HsqlException: incompatible data types in combination

查询:

final FlexibleSearchQuery flexibleSearchQuery = new FlexibleSearchQuery("
SELECT * FROM CUSTOMER AS c WHERE c.timestamp < TRUNC(SYSDATE) - 30")

有人可以就如何解决此问题提出建议吗?

我宁愿像这样将 java.util.Date 对象传递给灵活查询

//Import statement
import java.util.Calendar;
import java.util.Date;
import org.apache.commons.lang.time.DateUtils;

//Flexible search query 
final FlexibleSearchQuery flexibleSearchQuery = new FlexibleSearchQuery(" SELECT * FROM CUSTOMER AS c WHERE c.timestamp < ?days")
flexibleSearchQuery.addQueryParameter("days", substractDaysFromDate(30));
flexibleSearchService.search(flexibleSearchQuery);

//method to get date difference
private Date subtractDaysFromCurrentDate(int days)
{
    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.DATE, -days);
    cal = DateUtils.truncate(cal, Calendar.DATE);
    return cal.getTime();
}

+1 到 HybrisHelp 答案。您应该计算日期并将其传递给灵活查询。

使用 Java 8 次 api 的相同版本的较短版本。

final FlexibleSearchQuery flexibleSearchQuery = new FlexibleSearchQuery("
SELECT * FROM CUSTOMER AS c WHERE c.timestamp < ?inputDate")

flexibleSearchQuery.addQueryParameter("inputDate", 
                              new DateTime(Instant.now()).minusDays(30).toDate());

        final String QUERY = "SELECT * FROM {Customer} AS c WHERE c.timestamp < ?date";

        final Map<String, Date> queryMap = new HashMap<String, Date>();
        queryMap.put("date", DateUtils.addDays(new Date(),-30));
        final SearchResult<CustomerModel> results = flexibleSearchService.search(QUERY , queryMap);
        return results.getResult();