質問するログイン新規登録

質問編集履歴

5

修正

2018/09/27 02:48

投稿

_cocapeach
_cocapeach

スコア20

title CHANGED
File without changes
body CHANGED
@@ -18,8 +18,9 @@
18
18
  @Entity
19
19
  @Table(name = "hogehoge")
20
20
  public class Hogehoge {
21
+ @ManyToOne
21
- @Column(name = "Hoge")
22
+ @JoinColumn(name = "Hoge")
22
- private Long Hoge;
23
+ private Hoge hoge;
23
24
  }
24
25
  ```
25
26
 

4

コメント追記

2018/09/27 02:48

投稿

_cocapeach
_cocapeach

スコア20

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,5 @@
1
1
  お世話になります。
2
- OracleでNumber型として保持しているカラムをJavaでInteger型として定義しています。
2
+ OracleでNumber型として保持しているカラムをJavaでLong型として定義しています。
3
3
  そのカラムにUpdate文でNULLを入れると、
4
4
  > ORA-00932: データ型が一致しません: NUMBERが予想されましたがBINARYです。
5
5
 
@@ -46,10 +46,13 @@
46
46
  Hoge=?
47
47
  where
48
48
  id=?
49
+
50
+ //↓値が入った場合はBIGINT型でパラメータがセットされているが、NULLの場合はVARBINARY型でセットされている。
49
51
  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]
50
52
  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]
51
53
  2018-09-27 11:05:24.322 WARN 92809 --- [nio-8080-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 932, SQLState: 42000
52
54
  2018-09-27 11:05:24.322 ERROR 92809 --- [nio-8080-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper : ORA-00932: データ型が一致しません: NUMBERが予想されましたがBINARYです。
55
+
53
56
  ```
54
57
 
55
58
  ・試してみたこと①

3

IntegerではなくLongであったため、修正しました。

2018/09/27 02:34

投稿

_cocapeach
_cocapeach

スコア20

title CHANGED
File without changes
body CHANGED
@@ -19,7 +19,7 @@
19
19
  @Table(name = "hogehoge")
20
20
  public class Hogehoge {
21
21
  @Column(name = "Hoge")
22
- private Integer Hoge;
22
+ private Long Hoge;
23
23
  }
24
24
  ```
25
25
 
@@ -27,12 +27,12 @@
27
27
  //Repository
28
28
  @Modifying
29
29
  @Query("UPDATE Hogehoge SET Hoge = :Hoge")
30
- Integer updateByHoge(@Param("Hoge") Integer Hoge);
30
+ Integer updateByHoge(@Param("Hoge") Long Hoge);
31
31
  ```
32
32
 
33
33
  ```ここに言語を入力
34
34
  //Controller
35
- //form.getHogeはInteger型 NULLを返す場合がある
35
+ //form.getHogeはLong型 NULLを返す場合がある
36
36
  HogehogeRepository.updateByHoge(form.getHoge());
37
37
  ```
38
38
 
@@ -46,7 +46,7 @@
46
46
  Hoge=?
47
47
  where
48
48
  id=?
49
- 2018-09-27 11:05:23.955 TRACE 92809 --- [nio-8080-exec-7] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [INTEGER] - [null]
49
+ 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]
50
50
  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]
51
51
  2018-09-27 11:05:24.322 WARN 92809 --- [nio-8080-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 932, SQLState: 42000
52
52
  2018-09-27 11:05:24.322 ERROR 92809 --- [nio-8080-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper : ORA-00932: データ型が一致しません: NUMBERが予想されましたがBINARYです。
@@ -56,11 +56,11 @@
56
56
  ```ここに言語を入力
57
57
  @Modifying
58
58
  @Query("UPDATE Hogehoge SET Hoge = :Hoge")
59
- Integer updateByHoge(@Param("Hoge") Integer Hoge);
59
+ Integer updateByHoge(@Param("Hoge") Long Hoge);
60
60
 
61
61
  @Modifying
62
62
  @Query("UPDATE Hogehoge SET Hoge = CASE WHEN :Hoge != null THEN :Hoge ELSE null END")
63
- Integer updateByHoge(@Param("Hoge") Integer Hoge);
63
+ Integer updateByHoge(@Param("Hoge") Long Hoge);
64
64
 
65
65
  //これは成功しましたが、全てのUpdate文に適用させるとなると非常に膨大な作業になってしまうため、他の解決策を探しています。
66
66
 

2

ログを追記

2018/09/27 02:30

投稿

_cocapeach
_cocapeach

スコア20

title CHANGED
File without changes
body CHANGED
@@ -37,6 +37,21 @@
37
37
  ```
38
38
 
39
39
 
40
+ ```ここに言語を入力
41
+ //ログ
42
+ 2018-09-27 11:05:23.946 DEBUG 92809 --- [nio-8080-exec-7] org.hibernate.SQL :
43
+ update
44
+ Hogehoge
45
+ set
46
+ Hoge=?
47
+ where
48
+ id=?
49
+ 2018-09-27 11:05:23.955 TRACE 92809 --- [nio-8080-exec-7] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [INTEGER] - [null]
50
+ 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]
51
+ 2018-09-27 11:05:24.322 WARN 92809 --- [nio-8080-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 932, SQLState: 42000
52
+ 2018-09-27 11:05:24.322 ERROR 92809 --- [nio-8080-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper : ORA-00932: データ型が一致しません: NUMBERが予想されましたがBINARYです。
53
+ ```
54
+
40
55
  ・試してみたこと①
41
56
  ```ここに言語を入力
42
57
  @Modifying

1

試してみたことを追記

2018/09/27 02:09

投稿

_cocapeach
_cocapeach

スコア20

title CHANGED
File without changes
body CHANGED
@@ -34,4 +34,32 @@
34
34
  //Controller
35
35
  //form.getHogeはInteger型 NULLを返す場合がある
36
36
  HogehogeRepository.updateByHoge(form.getHoge());
37
+ ```
38
+
39
+
40
+ ・試してみたこと①
41
+ ```ここに言語を入力
42
+ @Modifying
43
+ @Query("UPDATE Hogehoge SET Hoge = :Hoge")
44
+ Integer updateByHoge(@Param("Hoge") Integer Hoge);
45
+
46
+ @Modifying
47
+ @Query("UPDATE Hogehoge SET Hoge = CASE WHEN :Hoge != null THEN :Hoge ELSE null END")
48
+ Integer updateByHoge(@Param("Hoge") Integer Hoge);
49
+
50
+ //これは成功しましたが、全てのUpdate文に適用させるとなると非常に膨大な作業になってしまうため、他の解決策を探しています。
51
+
52
+ ```
53
+
54
+ ・試してみたこと②
55
+ ```ここに言語を入力
56
+ //Repository
57
+ //引数の型をStringに変更
58
+ @Modifying
59
+ @Query("UPDATE Hogehoge SET Hoge = :Hoge")
60
+ Integer updateByHoge(@Param("Hoge") String Hoge);
61
+
62
+ //Controller
63
+ HogehogeRepository.updateByHoge(form.getHoge()!=null?form.getHoge.toString():null);
64
+ //StringだとNullが通りましたが、こちらも作業量が膨大なため、他の解決策を探しています。
37
65
  ```