8

私のクエリは次のようなものです:

where (:startDate is null or :endDate is null or DDATE between :startDate AND :endDate)
AND (:startDate is null or (:endDate is not null or DDATE between :startDate AND :date))

私はajax日付ピッカーから取得startDateします。私はこのように取得しているシステム日付です:endDatedate

Date utiDate = new Date();

クエリを実行すると、次のエラーが表示されます。

java.sql.SQLException: ORA-00932: inconsistent datatypes: expected DATE got BINARY
4

2 に答える 2

9

正しい答えを見つけようとしていると、ここに興味深い投稿が見つかりました。

:endDateが null の場合、条件DDATE between :startDate AND :endDateが評価されないことを確認できません。また、評価された場合、Oracle は null 値を日付に変換しようとするため、エラーが発生します。

部分を削除してクエリをテストしてみてくださいDDATE between :startDate AND :endDate。エラーはもう発生しないはずです。次に、 nullのbetween場合に演算子が評価されないように、クエリを変更する必要があります。:enddateこの投稿では、句CASE内でステートメントを使用することをお勧めします。WHERE多分それはあなたの問題を解決することができます。

短絡評価とOracleデータベースについて、問題を理解するのに役立つ質問を見つけました。

于 2013-05-16T16:29:34.307 に答える
2

Bean のプロパティ :startDate および :endDate は java.util.Date 型ではありませんが、Hibernate が SQL-DATE に自動的に変換できず、デフォルトとして BINARY を送信している別のものです。

javax.persistence.AttributeConverter< X, Y >を実装する必要があります

それに関するいくつかのチュートリアルがあります。

ヒント: war アプリに含まれる jar にそのコンバーターを配置する場合は、persistemce.xml に明示的にリストする必要があります。そうしないと、コンバーターが見つかりません。

    <persistence-unit name="default" transaction-type="JTA">
        <jta-data-source>java:/mydb</jta-data-source>

        <!-- register converter -->
        <class>com.example.persistence.LocalDateTimeConverter</class>
        ...
于 2018-08-14T09:05:45.183 に答える