さて、さまざまな戦略を何度も試した後、これが最終的に機能したことです。
この投稿を見たTuple
複数の結果タイプを返すことができるオブジェクトであるインターフェース。だから私のlike
を実行するには 比較してください。日付を文字列に単純にキャストすることはできないため、ここに手順を示します。
- 列を
Tuple
として取得します - タプルオブジェクトをチェックして、日付から割り当て可能かどうかを確認します
- そうである場合は、Date-Format式を取得し、それを
like
に渡します。 表現。
つまり、基本的に、これが私が最初に持っていたもので、明らかに失敗していました。
predicates.add(cb.like(cb.lower(entity.get("dateJoined").as(String.class)), "%"+search.toLowerCase()+"%"));
さて、これは私が持っているもので、美しく機能します;
Path<Tuple> tuple = entity.<Tuple>get("dateJoined");
if(tuple.getJavaType().isAssignableFrom(Date.class)){
Expression<String> dateStringExpr = cb.function("DATE_FORMAT", String.class, entity.get("dateJoined"), cb.literal("'%d/%m/%Y %r'"));
predicates.add(cb.like(cb.lower(dateStringExpr), "%"+search.toLowerCase()+"%"));
}
注-価値のある考慮事項 -
- 検索が開始される場所から、すべての日付がこのフォームで表示されることを認識しています
07/10/2015 10:25:09 PM
したがって、比較のために日付をフォーマットする方法をlike
で知ることができます。"'%d/%m/%Y %r'"
としての式 。 - これは、Datesで機能する1つのステップにすぎません。 int、long、char ...などの他のほとんどのタイプはすべて文字列に直接キャストできます。さらに多くのタイプのデータを探索するにつれて、文字列に直接キャストできない他のタイプについても同じことを確実に行います。 。
これは私にとっては完璧に機能しますが、これを正解としてマークする前に、さらに広範なテストを行い、その過程で、私の戦略について予約をしている人からのコメントを受け付けます。
そして最後に、これが何らかの形で助けてくれたその一人に...乾杯!