2016-08-30 7 views
2

私は、点火キャッシュにある特定のレコードを持っており、現在の日のすべてのレコードを取得したいと思います。このためには、キャッシュされたオブジェクトのLocalDateTime型フィールドをLocalDateオブジェクト、たとえばLocalDate.now()と比較する必要があります。これを行うためのクエリを作成するにはどうすればよいですか。 Oracle TODATE(date、format)では同じことが行われますが、この関数はH2には存在しません。 キャッシュフィールド日時:2016-08-30T05:31 日付インスタンス:2016-08-30 SQLは のようになります。String sql = "select * from cacheName date = 'convert(datetime)to date'"; H2でも可能ですか?あなたはこのためにカスタムSQL関数を使用することができApacheの点火でLocalDateをLocalDateTimeの日付部分と比較する

答えて

3

:たとえばhttps://ignite.apache.org/releases/mobile/org/apache/ignite/cache/query/annotations/QuerySqlFunction.html

、お使いの値クラスは次のように見える場合:

public static class MyFunctions { 
    @QuerySqlFunction 
    public static String toDate(LocalDateTime time) { 
     return time.format(DateTimeFormatter.ISO_LOCAL_DATE); 
    } 
} 

public class MyValue { 
    @QuerySqlField 
    private LocalDateTime time; 

    public MyValue(LocalDateTime time) { 
     this.time = time; 
    } 
} 

あなたはこのような関数を作成することができます

このような設定で提供してください:

cacheCfg.setSqlFunctionClasses(MyFunctions.class); 

クエリは次のようになります。返信用

select * from MyValue where toDate(time) = '2016-08-30' 
+0

こんにちは感謝を。 '@QuerySqlFunction'アノテーションを避け、 '@QuerySqlField'にQueryEntityのようなxmlを使用することは可能ですか? – Surinder

+0

いいえ、これはできません。しかし、なぜこれはあなたにとって問題なのでしょうか? –

+0

大きな問題ではなく、私たちはそれをソートしました。私たちはただ一つの場所で依存関係を点火したいと思っていました。このモデルオブジェクトはモジュールの外にありました。それを動作させるためにアイテムを移動しました。 再度お返事ありがとうございます。 – Surinder

関連する問題