MySQLからに切り替わった後PostgreSQL私のSQLクエリ(@Queryが春のデータリポジトリインタフェースで動作する)がもう機能しないことがわかりました。問題は、はbyteaとして送信されてヌル値によって引き起こされ、私は次の例外取得しています:@queryとSpringデータリポジトリがnullをPostgreSQLデータベースに送信する
Caused by: org.postgresql.util.PSQLException: ERROR: operator does not exist: bigint = bytea
Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
リポジトリ:
public interface WineRepository extends PagingAndSortingRepository<Wine, Long> {
@Query(value = "SELECT * FROM WINE w WHERE (?1 IS NULL OR w.id = ?1)", nativeQuery = true)
Wine simpleTest(Long id);
}
簡単なテスト:
LOGGER.warn("test1: {}", wineRepository.simpleTest(1L)); //ok
LOGGER.warn("test2: {}", wineRepository.simpleTest(null)); //PSQLException
を
実際のケースでは、私はnullになることができる複数のパラメータがあり、私はそれらをjavaコードでチェックしたくないSQLクエリにそれらを送信します。私はここでstackoverflowの質問をチェックしたが、特にバネデータリポジトリの@queryアノテーションには良い答えが見つからなかった。
PostgreSQLでnull値を処理する正しい方法は何ですか?それとも私のアプローチを修正するためのヒントがありますか?ありがとう!
更新: 問題がnativeQuery = true
に関連すると思わ値がfalseの場合に予想されるように、null値が働きます。つまり、nativeQueryを有効にしても機能させることが可能かどうかということです。
しかし、私の意図はJavaからの入力がnullかどうかをチェックすることです。私はnullのデータベースから値を選択しようとしていません。 – rhorvath