お世話になります。
OracleでNumber型として保持しているカラムをJavaでLong型として定義しています。
そのカラムにUpdate文でNULLを入れると、
ORA-00932: データ型が一致しません: NUMBERが予想されましたがBINARYです。
というエラーが発生してしまいます。
調べたのですが、自分と同じような現象の記事がなく、解決に至りませんでした。
ご教示頂けますと幸いです。
//Table "COLUMN_NAME","DATA_TYPE","NULLABLE","DATA_DEFAULT","COLUMN_ID","COMMENTS" "Hoge","NUMBER(2,0)","Yes","",18,""
//Entity @Entity @Table(name = "hogehoge") public class Hogehoge { @ManyToOne @JoinColumn(name = "Hoge") private Hoge hoge; }
//Repository @Modifying @Query("UPDATE Hogehoge SET Hoge = :Hoge") Integer updateByHoge(@Param("Hoge") Long Hoge);
//Controller //form.getHogeはLong型 NULLを返す場合がある HogehogeRepository.updateByHoge(form.getHoge());
//ログ 2018-09-27 11:05:23.946 DEBUG 92809 --- [nio-8080-exec-7] org.hibernate.SQL : update Hogehoge set Hoge=? where id=? //↓値が入った場合はBIGINT型でパラメータがセットされているが、NULLの場合はVARBINARY型でセットされている。 2018-09-27 11:05:23.955 TRACE 92809 --- [nio-8080-exec-7] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [VARBINARY] - [null] 2018-09-27 11:05:23.955 TRACE 92809 --- [nio-8080-exec-7] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [BIGINT] - [1] 2018-09-27 11:05:24.322 WARN 92809 --- [nio-8080-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 932, SQLState: 42000 2018-09-27 11:05:24.322 ERROR 92809 --- [nio-8080-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper : ORA-00932: データ型が一致しません: NUMBERが予想されましたがBINARYです。
・試してみたこと①
@Modifying @Query("UPDATE Hogehoge SET Hoge = :Hoge") Integer updateByHoge(@Param("Hoge") Long Hoge); ↓ @Modifying @Query("UPDATE Hogehoge SET Hoge = CASE WHEN :Hoge != null THEN :Hoge ELSE null END") Integer updateByHoge(@Param("Hoge") Long Hoge); //これは成功しましたが、全てのUpdate文に適用させるとなると非常に膨大な作業になってしまうため、他の解決策を探しています。
・試してみたこと②
//Repository //引数の型をStringに変更 @Modifying @Query("UPDATE Hogehoge SET Hoge = :Hoge") Integer updateByHoge(@Param("Hoge") String Hoge); //Controller HogehogeRepository.updateByHoge(form.getHoge()!=null?form.getHoge.toString():null); //StringだとNullが通りましたが、こちらも作業量が膨大なため、他の解決策を探しています。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。