異なるエンタテイメントで日付を検索するクエリを作成したいとします。私の構造は次のとおりです。JPA Criteria Builderの/ Case文の場合
- 契約は、日付(非NULL可能)
- 従業員は、従業員が持っている場合は、従業員が契約ID(NULL可能)
を有していてもよく、日付(非NULL可能)
これまでの私のコードは次のとおりです。
if (inputDate!= null) {
ParameterExpression<Date> exp = criteriaBuilder.parameter(Date.class, "inputDate");
criteria.add(criteriaBuilder.or(
criteriaBuilder.isNull(employee.get("contract")),
criteriaBuilder.lessThanOrEqualTo(employee.<Date>get("creationDate"), exp), criteriaBuilder.lessThanOrEqualTo((employee.join("contract").<Date>get("fromDate")), exp)));}
これがが動作するようには思えません。私は常に私が期待していないisNullに入るように見えます。
私はこれをもう少し詳しく見ていきたいと思いますが、私の質問は、これが正しい方法かどうかということです。それは...ですか?私はcriteriaBuilderの中でもselectCaseを見てきました。おそらくそれがより良い解決策かもしれません。
すべてのポインタが大きく受信されます。ここで
おかげ
こんにちはJMelnik、ありがとうございます。私がこのコードで持っている問題は、selectCaseが述語ではなく式を返すことです。実際に述語を返すので、述語全体を大文字小文字に変換しようとしました。残念ながら、私はキャストしているので、私は奇妙に見えるのはまだコンパイルされません。これが何であるか知っていますか?ありがとう – RNJ
@ user846476私たちが行う必要があるのは、ケースステートメントの日付と日付を比較することだと思います。 – JMelnik