質問編集履歴

5

2018/10/02 14:30

投稿

_cocapeach
_cocapeach

スコア20

test CHANGED
File without changes
test CHANGED
File without changes

4

各バージョン情報追記

2018/10/02 14:30

投稿

_cocapeach
_cocapeach

スコア20

test CHANGED
File without changes
test CHANGED
@@ -8,6 +8,24 @@
8
8
 
9
9
 
10
10
 
11
+ ```ここに言語を入力
12
+
13
+ 各バージョン情報
14
+
15
+ Java:1.8
16
+
17
+ フレームワーク:Spring Boot
18
+
19
+ ORM:JPA
20
+
21
+ ORMバージョン:spring-boot-starter-data-jpa-2.0.0.BUILD-SNAPSHOT
22
+
23
+ DB:Oracle
24
+
25
+ DBバージョン:12.2.0.1.0
26
+
27
+ ```
28
+
11
29
 
12
30
 
13
31
  ①下記のような場合、コミット前のデータ(今からコミットしようとしているデータ)が取得できます。

3

Repository定義追記

2018/10/02 13:33

投稿

_cocapeach
_cocapeach

スコア20

test CHANGED
File without changes
test CHANGED
@@ -92,7 +92,21 @@
92
92
 
93
93
 
94
94
 
95
-
95
+ ```ここに言語を入力
96
+
97
+ //Repository
98
+
99
+ public interface HogeRepository extends JpaRepository<Hoge, Long>, JpaSpecificationExecutor<Hoge> {
100
+
101
+ @Modifying
102
+
103
+ @Query("UPDATE Hoge SET comment=:comment WHERE id = :id")
104
+
105
+ Integer updateHoge(@Param("comment") String comment, @Param("id") Long id);
106
+
107
+ }
108
+
109
+ ```
96
110
 
97
111
 
98
112
 

2

追記

2018/10/02 13:12

投稿

_cocapeach
_cocapeach

スコア20

test CHANGED
File without changes
test CHANGED
@@ -235,3 +235,37 @@
235
235
 
236
236
 
237
237
  ```
238
+
239
+
240
+
241
+ 試してみたこと③
242
+
243
+ ```ここに言語を入力
244
+
245
+ TransactionDefinition def = new DefaultTransactionDefinition();
246
+
247
+ TransactionStatus status = transactionManager.getTransaction(def);
248
+
249
+
250
+
251
+ try {
252
+
253
+ //古いデータが取得されました。
254
+
255
+ Hoge hoge1 = hogeRepository.findById(form.getId());
256
+
257
+ hoge1.setComment(form.getComment());
258
+
259
+ hoge1.save();
260
+
261
+ //コミット前のデータが取得されました。
262
+
263
+ Hoge hoge2 = hogeRepository.findById(form.getId());
264
+
265
+ } catch (Exception e) {
266
+
267
+
268
+
269
+ }
270
+
271
+ ```

1

追記

2018/10/02 10:47

投稿

_cocapeach
_cocapeach

スコア20

test CHANGED
File without changes
test CHANGED
@@ -89,3 +89,149 @@
89
89
  transactionManager.commit(status);
90
90
 
91
91
  ```
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+ ・試してみたこと①
102
+
103
+ ```ここに言語を入力
104
+
105
+ TransactionDefinition def = new DefaultTransactionDefinition();
106
+
107
+ TransactionStatus status = transactionManager.getTransaction(def);
108
+
109
+ try {
110
+
111
+ hogeRepository.updateHoge(
112
+
113
+ form.getId(),
114
+
115
+ form.getComment()
116
+
117
+ );
118
+
119
+ //コミット前のデータが取得できました。
120
+
121
+ Hoge hoge1 = hogeRepository.findById(form.getId());
122
+
123
+ } catch (Exception e) {
124
+
125
+
126
+
127
+ }
128
+
129
+ //コミット前のデータが取得できました。
130
+
131
+ Hoge hoge2 = hogeRepository.findById(form.getId());
132
+
133
+
134
+
135
+ try {
136
+
137
+ //コミット前のデータが取得できました。
138
+
139
+ Hoge hoge3 = hogeRepository.findById(form.getId());
140
+
141
+ hogeRepository.updateHoge(
142
+
143
+ form.getId(),
144
+
145
+ form.getComment()
146
+
147
+ );
148
+
149
+ //コミット前のデータが取得できました。
150
+
151
+ Hoge hoge4 = hogeRepository.findById(form.getId());
152
+
153
+ } catch (Exception e) {
154
+
155
+
156
+
157
+ }
158
+
159
+ //コミット前のデータが取得できました。
160
+
161
+ Hoge hoge5 = hogeRepository.findById(form.getId());
162
+
163
+ ```
164
+
165
+
166
+
167
+ 試してみたこと②(試してみたこと①の処理を逆にしてみました)
168
+
169
+ ```ここに言語を入力
170
+
171
+ TransactionDefinition def = new DefaultTransactionDefinition();
172
+
173
+ TransactionStatus status = transactionManager.getTransaction(def);
174
+
175
+
176
+
177
+ try {
178
+
179
+ //古いデータが取得されました。
180
+
181
+ Hoge hoge3 = hogeRepository.findById(form.getId());
182
+
183
+ hogeRepository.updateHoge(
184
+
185
+ form.getId(),
186
+
187
+ form.getComment()
188
+
189
+ );
190
+
191
+ //古いデータが取得されました。
192
+
193
+ Hoge hoge4 = hogeRepository.findById(form.getId());
194
+
195
+ } catch (Exception e) {
196
+
197
+
198
+
199
+ }
200
+
201
+ //古いデータが取得されました。
202
+
203
+ Hoge hoge5 = hogeRepository.findById(form.getId());
204
+
205
+
206
+
207
+
208
+
209
+ try {
210
+
211
+ hogeRepository.updateHoge(
212
+
213
+ form.getId(),
214
+
215
+ form.getComment()
216
+
217
+ );
218
+
219
+ //古いデータが取得されました。
220
+
221
+ Hoge hoge1 = hogeRepository.findById(form.getId());
222
+
223
+ } catch (Exception e) {
224
+
225
+
226
+
227
+ }
228
+
229
+ //古いデータが取得されました。
230
+
231
+ Hoge hoge2 = hogeRepository.findById(form.getId());
232
+
233
+
234
+
235
+
236
+
237
+ ```