2017-08-25 70 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