Вычитание даты в FlexibleSerchQuery - PullRequest
1 голос
/ 06 ноября 2019

Я пытаюсь написать FlexibleSearchQuery, чтобы найти записи старше 30 дней в hybris, подключенном к базе данных hsqldb, но приведенный ниже код выдает

org.hsqldb.HsqlException: incompatible data types in combination

Запрос:

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

Может кто-нибудь дать совет, как решить эту проблему?

Ответы [ 3 ]

2 голосов
/ 08 ноября 2019

+ 1 к ответу HybrisHelp. Вы должны рассчитать дату и передать ее в гибкий запрос.

Укороченная версия с использованием Java 8 time 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());

2 голосов
/ 06 ноября 2019

Я бы предпочел передать 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();
}
0 голосов
/ 13 ноября 2019
        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();
...