2017-08-25 31 views
0

我想知道在hybris flexiblesearch中将日期与今天的日期进行比较的方式。Hybris Flexiblesearch今日约会

我在网上搜索,但我找不到如何。随着flexiblesearch查询下面我想找到已经在今天之前创建的产品,所以是有某种函数的返回今天日期,也许类似这样的查询的内容:

SELECT {pk} FROM {Product} 
WHERE creationTime < NOW 

任何帮助表示赞赏

+0

请您的问题*具体*,所以不“类似的东西”,但实际上你真正想要的。而且,到目前为止您尝试了什么,以及您遇到的问题是什么? –

回答

1

理想的情况下,当前的日期应该在java中被拾起,然后发送到DB查询。但是,如果您确定数据库中的日期也可以正常工作,那么

SELECT {pk} FROM {ItemType AS o} WHERE {o.date} <= CURDATE() 

会起作用。

2

有办法,但它可能是数据库特定的。在MySQL能正常工作:

SELECT {pk} FROM {Order as o} 
WHERE {o.creationTime} < NOW() 

您也可以用SYSDATE玩()

+0

我试图在使用oracle的5.5.1.0 Hybris实例中运行这个(来自HAC),它不起作用。最有可能它是数据库特定 –

+0

你可以尝试使用SYSDATE或SYSDATE() –

+0

谢谢,这将工作,但只是在MySQL上,我正在寻找更一般的东西 – Simo

0

我建议使用timeService豆开箱即用的,因为这种服务为本地服务时区的修正一些配置。所有日期时间操作也都使用此服务。您可以将值设置为参数以弹性查询。

0

我不确定您是否可以编写Java代码来完成您的任务,但使用Java您可以定义定期灵活的搜索参数来传递日期。

例如,这里有一个类可以获取当前时间之前创建的订单。

import de.hybris.platform.core.model.order.OrderModel; 
import de.hybris.platform.servicelayer.search.FlexibleSearchQuery; 
import de.hybris.platform.servicelayer.search.FlexibleSearchService; 
import de.hybris.platform.servicelayer.search.SearchResult; 
import de.hybris.platform.servicelayer.time.TimeService; 

import javax.annotation.Resource; 
import java.util.List; 

public class SomeOrderDao { 

    @Resource 
    private FlexibleSearchService flexibleSearchService; 
    @Resource 
    private TimeService timeService; 

    public List<OrderModel> findSomeOrders(){ 
     String query = "SELECT {PK} FROM {Order} WHERE {creationtime} < ?date"; 
     final FlexibleSearchQuery getOrdersQuery = new FlexibleSearchQuery(query); 
     getOrdersQuery.addQueryParameter("date", timeService.getCurrentTime()); 
     SearchResult<OrderModel> searchResult = flexibleSearchService.search(getOrdersQuery); 
     return searchResult.getResult(); 
    } 

} 
0

您可以使用本机资源,从你的数据库,例如:

对于MySQL:

SELECT {pk} FROM {Product} 
WHERE creationTime < NOW() 

对于Oracle:

SELECT {pk} FROM {Product} 
WHERE creationTime < SYSDATE