質問編集履歴

5

修正

2018/09/27 02:48

投稿

_cocapeach
_cocapeach

スコア20

test CHANGED
File without changes
test CHANGED
@@ -38,9 +38,11 @@
38
38
 
39
39
  public class Hogehoge {
40
40
 
41
- @Column(name = "Hoge")
41
+ @ManyToOne
42
42
 
43
+ @JoinColumn(name = "Hoge")
44
+
43
- private Long Hoge;
45
+ private Hoge hoge;
44
46
 
45
47
  }
46
48
 

4

コメント追記

2018/09/27 02:48

投稿

_cocapeach
_cocapeach

スコア20

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  お世話になります。
2
2
 
3
- OracleでNumber型として保持しているカラムをJavaでInteger型として定義しています。
3
+ OracleでNumber型として保持しているカラムをJavaでLong型として定義しています。
4
4
 
5
5
  そのカラムにUpdate文でNULLを入れると、
6
6
 
@@ -94,6 +94,10 @@
94
94
 
95
95
  id=?
96
96
 
97
+
98
+
99
+ //↓値が入った場合はBIGINT型でパラメータがセットされているが、NULLの場合はVARBINARY型でセットされている。
100
+
97
101
  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]
98
102
 
99
103
  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]
@@ -101,6 +105,8 @@
101
105
  2018-09-27 11:05:24.322 WARN 92809 --- [nio-8080-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 932, SQLState: 42000
102
106
 
103
107
  2018-09-27 11:05:24.322 ERROR 92809 --- [nio-8080-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper : ORA-00932: データ型が一致しません: NUMBERが予想されましたがBINARYです。
108
+
109
+
104
110
 
105
111
  ```
106
112
 

3

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

2018/09/27 02:34

投稿

_cocapeach
_cocapeach

スコア20

test CHANGED
File without changes
test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  @Column(name = "Hoge")
42
42
 
43
- private Integer Hoge;
43
+ private Long Hoge;
44
44
 
45
45
  }
46
46
 
@@ -56,7 +56,7 @@
56
56
 
57
57
  @Query("UPDATE Hogehoge SET Hoge = :Hoge")
58
58
 
59
- Integer updateByHoge(@Param("Hoge") Integer Hoge);
59
+ Integer updateByHoge(@Param("Hoge") Long Hoge);
60
60
 
61
61
  ```
62
62
 
@@ -66,7 +66,7 @@
66
66
 
67
67
  //Controller
68
68
 
69
- //form.getHogeはInteger型 NULLを返す場合がある
69
+ //form.getHogeはLong型 NULLを返す場合がある
70
70
 
71
71
  HogehogeRepository.updateByHoge(form.getHoge());
72
72
 
@@ -94,7 +94,7 @@
94
94
 
95
95
  id=?
96
96
 
97
- 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]
97
+ 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]
98
98
 
99
99
  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]
100
100
 
@@ -114,7 +114,7 @@
114
114
 
115
115
  @Query("UPDATE Hogehoge SET Hoge = :Hoge")
116
116
 
117
- Integer updateByHoge(@Param("Hoge") Integer Hoge);
117
+ Integer updateByHoge(@Param("Hoge") Long Hoge);
118
118
 
119
119
 
120
120
 
@@ -122,7 +122,7 @@
122
122
 
123
123
  @Query("UPDATE Hogehoge SET Hoge = CASE WHEN :Hoge != null THEN :Hoge ELSE null END")
124
124
 
125
- Integer updateByHoge(@Param("Hoge") Integer Hoge);
125
+ Integer updateByHoge(@Param("Hoge") Long Hoge);
126
126
 
127
127
 
128
128
 

2

ログを追記

2018/09/27 02:30

投稿

_cocapeach
_cocapeach

スコア20

test CHANGED
File without changes
test CHANGED
@@ -76,6 +76,36 @@
76
76
 
77
77
 
78
78
 
79
+ ```ここに言語を入力
80
+
81
+ //ログ
82
+
83
+ 2018-09-27 11:05:23.946 DEBUG 92809 --- [nio-8080-exec-7] org.hibernate.SQL :
84
+
85
+ update
86
+
87
+ Hogehoge
88
+
89
+ set
90
+
91
+ Hoge=?
92
+
93
+ where
94
+
95
+ id=?
96
+
97
+ 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]
98
+
99
+ 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]
100
+
101
+ 2018-09-27 11:05:24.322 WARN 92809 --- [nio-8080-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 932, SQLState: 42000
102
+
103
+ 2018-09-27 11:05:24.322 ERROR 92809 --- [nio-8080-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper : ORA-00932: データ型が一致しません: NUMBERが予想されましたがBINARYです。
104
+
105
+ ```
106
+
107
+
108
+
79
109
  ・試してみたこと①
80
110
 
81
111
  ```ここに言語を入力

1

試してみたことを追記

2018/09/27 02:09

投稿

_cocapeach
_cocapeach

スコア20

test CHANGED
File without changes
test CHANGED
@@ -71,3 +71,59 @@
71
71
  HogehogeRepository.updateByHoge(form.getHoge());
72
72
 
73
73
  ```
74
+
75
+
76
+
77
+
78
+
79
+ ・試してみたこと①
80
+
81
+ ```ここに言語を入力
82
+
83
+ @Modifying
84
+
85
+ @Query("UPDATE Hogehoge SET Hoge = :Hoge")
86
+
87
+ Integer updateByHoge(@Param("Hoge") Integer Hoge);
88
+
89
+
90
+
91
+ @Modifying
92
+
93
+ @Query("UPDATE Hogehoge SET Hoge = CASE WHEN :Hoge != null THEN :Hoge ELSE null END")
94
+
95
+ Integer updateByHoge(@Param("Hoge") Integer Hoge);
96
+
97
+
98
+
99
+ //これは成功しましたが、全てのUpdate文に適用させるとなると非常に膨大な作業になってしまうため、他の解決策を探しています。
100
+
101
+
102
+
103
+ ```
104
+
105
+
106
+
107
+ ・試してみたこと②
108
+
109
+ ```ここに言語を入力
110
+
111
+ //Repository
112
+
113
+ //引数の型をStringに変更
114
+
115
+ @Modifying
116
+
117
+ @Query("UPDATE Hogehoge SET Hoge = :Hoge")
118
+
119
+ Integer updateByHoge(@Param("Hoge") String Hoge);
120
+
121
+
122
+
123
+ //Controller
124
+
125
+ HogehogeRepository.updateByHoge(form.getHoge()!=null?form.getHoge.toString():null);
126
+
127
+ //StringだとNullが通りましたが、こちらも作業量が膨大なため、他の解決策を探しています。
128
+
129
+ ```