私はCriteria APIを使用して、Hibernateを実装として使用してクエリを作成しています。データベースはMS SQL Server 2014です。Criteriaクエリを使用してStringフィールドをwhere句の数値に変換するにはどうすればよいですか?
私のデータベースには、数字と文字列を含む文字列フィールドがあります。数値を数値と比較したい。 SQLでは、このようなものになるだろう:
select *
from table
where ISNUMERIC(table.value) and CONVERT(float, table.value) > 5
(関数名で私を引用しないでください。)あり基準クエリでこれを行う直接的な方法のように見えるので、私は使用してみましたしません機能()メソッド:
Expression<Float> convertedExpression = criteria.function("CONVERT", Float.class, criteria.literal(Float.class), baseExpression);
しかし、このアプローチはラà多少役に立たないエラーメッセージを与える「の近くに不正な構文)」または「@ P1の近くに不正な構文」。これは、最初のパラメータがメソッドに渡されたためです。変換する型にする必要があります。
CONVERT機能を動作させる助けや、全く異なるアプローチがあれば幸いです。
この列はすでにStringとしてマップされています(データベースのString列です)。しかし、いくつかのエントリー(すべてではありません)は実際には数字であり、私はしたいです<, >、<= or > =それらの比較。 –
本当にCriteriaが必要な場合SqlProjectionは唯一のオプションのようです。その他はネイティブクエリを作成することです。 –