https://www.nakamuri.info/mw/index.php?title=MyBatis%E3%81%A7%E8%A1%8C%E3%83%AD%E3%83%83%E3%82%AF(%E6%82%B2%E8%A6%B3%E3%83%AD%E3%83%83%E3%82%AF)%E3%82%92%E8%A1%8C%E3%81%86%E3%81%AB%E3%81%AF%EF%BC%9F&feed=atom&action=history
MyBatisで行ロック(悲観ロック)を行うには? - 変更履歴
2024-03-29T06:40:14Z
このウィキのこのページに関する変更履歴
MediaWiki 1.22.6
//www.nakamuri.info/mw/index.php?title=MyBatis%E3%81%A7%E8%A1%8C%E3%83%AD%E3%83%83%E3%82%AF(%E6%82%B2%E8%A6%B3%E3%83%AD%E3%83%83%E3%82%AF)%E3%82%92%E8%A1%8C%E3%81%86%E3%81%AB%E3%81%AF%EF%BC%9F&diff=3607&oldid=prev
Nakamuri: /* うまくゆかない理由 */
2016-11-19T12:54:38Z
<p><span dir="auto"><span class="autocomment">うまくゆかない理由</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">←前の版</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">2016年11月19日 (土) 12:54時点における版</td>
</tr><tr><td colspan="2" class="diff-lineno">19行:</td>
<td colspan="2" class="diff-lineno">19行:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>多くのデータベースの既定のトランザクションのアイソレーションレベルは READ COMMITED です。</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>多くのデータベースの既定のトランザクションのアイソレーションレベルは READ COMMITED です。</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>READ <del class="diffchange diffchange-inline">COMMITEDでは通常行ロックの寿命は、カーソルがその行に留まっている間です、しかし、MyBatis </del>は select <del class="diffchange diffchange-inline">ステートメント</del></div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>READ <ins class="diffchange diffchange-inline">COMMITEDでは通常行ロックの寿命は、カーソルがその行に留まっている間です、しかし、</ins></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline">を実行すると、カーソルも </del>PreparedStatement <del class="diffchange diffchange-inline">もクローズしてしまいます。これでは行ロックが残る訳が有りません。</del></div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">'''MyBatis </ins>は select <ins class="diffchange diffchange-inline">ステートメントを実行すると、カーソルも </ins>PreparedStatement <ins class="diffchange diffchange-inline">もクローズしてしまいます'''。</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">これでは行ロックが残る訳が有りません。</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==対処法==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==対処法==</div></td></tr>
</table>
Nakamuri
//www.nakamuri.info/mw/index.php?title=MyBatis%E3%81%A7%E8%A1%8C%E3%83%AD%E3%83%83%E3%82%AF(%E6%82%B2%E8%A6%B3%E3%83%AD%E3%83%83%E3%82%AF)%E3%82%92%E8%A1%8C%E3%81%86%E3%81%AB%E3%81%AF%EF%BC%9F&diff=3606&oldid=prev
Nakamuri: /* 対処法 */
2016-11-19T12:53:58Z
<p><span dir="auto"><span class="autocomment">対処法</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">←前の版</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">2016年11月19日 (土) 12:53時点における版</td>
</tr><tr><td colspan="2" class="diff-lineno">24行:</td>
<td colspan="2" class="diff-lineno">24行:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==対処法==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==対処法==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>トランザクションのアイソレーションレベルを REPEATABLE_READ <del class="diffchange diffchange-inline">にします。</del></div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">'''</ins>トランザクションのアイソレーションレベルを REPEATABLE_READ <ins class="diffchange diffchange-inline">にします'''。</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>トランザクションのアイソレーションレベルが REPEATABLE_READ なら、行ロックの寿命はトランザクションの終了(commit/rollback)までです。</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>トランザクションのアイソレーションレベルが REPEATABLE_READ なら、行ロックの寿命はトランザクションの終了(commit/rollback)までです。</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>トランザクションのアイソレーションレベルは  </div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>トランザクションのアイソレーションレベルは  </div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>SqlSessionFactory#openSession の引数で指定できます。</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>SqlSessionFactory#openSession の引数で指定できます。</div></td></tr>
</table>
Nakamuri
//www.nakamuri.info/mw/index.php?title=MyBatis%E3%81%A7%E8%A1%8C%E3%83%AD%E3%83%83%E3%82%AF(%E6%82%B2%E8%A6%B3%E3%83%AD%E3%83%83%E3%82%AF)%E3%82%92%E8%A1%8C%E3%81%86%E3%81%AB%E3%81%AF%EF%BC%9F&diff=3605&oldid=prev
Nakamuri: /* 対処法 */
2016-11-19T12:53:41Z
<p><span dir="auto"><span class="autocomment">対処法</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">←前の版</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">2016年11月19日 (土) 12:53時点における版</td>
</tr><tr><td colspan="2" class="diff-lineno">24行:</td>
<td colspan="2" class="diff-lineno">24行:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==対処法==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==対処法==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline">アイソレーションレベルを </del>REPEATABLE_READ にします。</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">トランザクションのアイソレーションレベルを </ins>REPEATABLE_READ にします。</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline">アイソレーションレベルが </del>REPEATABLE_READ なら、行ロックの寿命はトランザクションの終了(commit/rollback)までです。</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">トランザクションのアイソレーションレベルが </ins>REPEATABLE_READ なら、行ロックの寿命はトランザクションの終了(commit/rollback)までです。</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline">アイソレーションレベルは </del></div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">トランザクションのアイソレーションレベルは </ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>SqlSessionFactory#openSession の引数で指定できます。</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>SqlSessionFactory#openSession の引数で指定できます。</div></td></tr>
</table>
Nakamuri
//www.nakamuri.info/mw/index.php?title=MyBatis%E3%81%A7%E8%A1%8C%E3%83%AD%E3%83%83%E3%82%AF(%E6%82%B2%E8%A6%B3%E3%83%AD%E3%83%83%E3%82%AF)%E3%82%92%E8%A1%8C%E3%81%86%E3%81%AB%E3%81%AF%EF%BC%9F&diff=3604&oldid=prev
Nakamuri: /* うまくゆかない理由 */
2016-11-19T12:52:18Z
<p><span dir="auto"><span class="autocomment">うまくゆかない理由</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">←前の版</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">2016年11月19日 (土) 12:52時点における版</td>
</tr><tr><td colspan="2" class="diff-lineno">19行:</td>
<td colspan="2" class="diff-lineno">19行:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>多くのデータベースの既定のトランザクションのアイソレーションレベルは READ COMMITED です。</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>多くのデータベースの既定のトランザクションのアイソレーションレベルは READ COMMITED です。</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>READ <del class="diffchange diffchange-inline">COMMITEDでは通常行ロックの寿命はカーソルがその行に留まっている間です、しかし、MyBatis </del>は select ステートメント</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>READ <ins class="diffchange diffchange-inline">COMMITEDでは通常行ロックの寿命は、カーソルがその行に留まっている間です、しかし、MyBatis </ins>は select ステートメント</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>を実行すると、カーソルも PreparedStatement もクローズしてしまいます。これでは行ロックが残る訳が有りません。</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>を実行すると、カーソルも PreparedStatement もクローズしてしまいます。これでは行ロックが残る訳が有りません。</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
</table>
Nakamuri
//www.nakamuri.info/mw/index.php?title=MyBatis%E3%81%A7%E8%A1%8C%E3%83%AD%E3%83%83%E3%82%AF(%E6%82%B2%E8%A6%B3%E3%83%AD%E3%83%83%E3%82%AF)%E3%82%92%E8%A1%8C%E3%81%86%E3%81%AB%E3%81%AF%EF%BC%9F&diff=3603&oldid=prev
Nakamuri: /* うまくゆかない理由 */
2016-11-19T12:52:05Z
<p><span dir="auto"><span class="autocomment">うまくゆかない理由</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">←前の版</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">2016年11月19日 (土) 12:52時点における版</td>
</tr><tr><td colspan="2" class="diff-lineno">19行:</td>
<td colspan="2" class="diff-lineno">19行:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>多くのデータベースの既定のトランザクションのアイソレーションレベルは READ COMMITED です。</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>多くのデータベースの既定のトランザクションのアイソレーションレベルは READ COMMITED です。</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>READ <del class="diffchange diffchange-inline">COMMITEDでは行ロックの寿命はカーソルがその行に留まっている間です、しかし、MyBatis </del>は select ステートメント</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>READ <ins class="diffchange diffchange-inline">COMMITEDでは通常行ロックの寿命はカーソルがその行に留まっている間です、しかし、MyBatis </ins>は select ステートメント</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>を実行すると、カーソルも PreparedStatement もクローズしてしまいます。これでは行ロックが残る訳が有りません。</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>を実行すると、カーソルも PreparedStatement もクローズしてしまいます。これでは行ロックが残る訳が有りません。</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
</table>
Nakamuri
//www.nakamuri.info/mw/index.php?title=MyBatis%E3%81%A7%E8%A1%8C%E3%83%AD%E3%83%83%E3%82%AF(%E6%82%B2%E8%A6%B3%E3%83%AD%E3%83%83%E3%82%AF)%E3%82%92%E8%A1%8C%E3%81%86%E3%81%AB%E3%81%AF%EF%BC%9F&diff=3602&oldid=prev
Nakamuri: /* うまくゆかない理由 */
2016-11-19T12:51:29Z
<p><span dir="auto"><span class="autocomment">うまくゆかない理由</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">←前の版</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">2016年11月19日 (土) 12:51時点における版</td>
</tr><tr><td colspan="2" class="diff-lineno">17行:</td>
<td colspan="2" class="diff-lineno">17行:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==うまくゆかない理由==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==うまくゆかない理由==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline">多くのデータベースの既定のアイソレーションレベルは </del>READ COMMITED です。</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">多くのデータベースの既定のトランザクションのアイソレーションレベルは </ins>READ COMMITED です。</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>READ COMMITEDでは行ロックの寿命はカーソルがその行に留まっている間です、しかし、MyBatis は select ステートメント</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>READ COMMITEDでは行ロックの寿命はカーソルがその行に留まっている間です、しかし、MyBatis は select ステートメント</div></td></tr>
</table>
Nakamuri
//www.nakamuri.info/mw/index.php?title=MyBatis%E3%81%A7%E8%A1%8C%E3%83%AD%E3%83%83%E3%82%AF(%E6%82%B2%E8%A6%B3%E3%83%AD%E3%83%83%E3%82%AF)%E3%82%92%E8%A1%8C%E3%81%86%E3%81%AB%E3%81%AF%EF%BC%9F&diff=3601&oldid=prev
Nakamuri: /* 行ロック(悲観ロック)は単純にやってもうまくゆかない */
2016-11-19T12:51:04Z
<p><span dir="auto"><span class="autocomment">行ロック(悲観ロック)は単純にやってもうまくゆかない</span></span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">←前の版</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">2016年11月19日 (土) 12:51時点における版</td>
</tr><tr><td colspan="2" class="diff-lineno">11行:</td>
<td colspan="2" class="diff-lineno">11行:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>ただ、MyBatis では selecetステートメント(Mapperインターフェースの select用メソッド)で select ・・・ for update を実行し、</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>ただ、MyBatis では selecetステートメント(Mapperインターフェースの select用メソッド)で select ・・・ for update を実行し、</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>updateステートメント(Mapperインターフェースの update用メソッド)<del class="diffchange diffchange-inline">で行を更新してもうまくゆかないことが多いです。 </del></div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>updateステートメント(Mapperインターフェースの update用メソッド)<ins class="diffchange diffchange-inline">で行を更新しても'''うまくゆかないことが多い'''です。</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">何故でしょう?</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==うまくゆかない理由==</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>==うまくゆかない理由==</div></td></tr>
</table>
Nakamuri
//www.nakamuri.info/mw/index.php?title=MyBatis%E3%81%A7%E8%A1%8C%E3%83%AD%E3%83%83%E3%82%AF(%E6%82%B2%E8%A6%B3%E3%83%AD%E3%83%83%E3%82%AF)%E3%82%92%E8%A1%8C%E3%81%86%E3%81%AB%E3%81%AF%EF%BC%9F&diff=3600&oldid=prev
2016年11月19日 (土) 12:49にNakamuriによる
2016-11-19T12:49:59Z
<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">←前の版</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">2016年11月19日 (土) 12:49時点における版</td>
</tr><tr><td colspan="2" class="diff-lineno">2行:</td>
<td colspan="2" class="diff-lineno">2行:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[メインページ]]&gt;[[コンピュータの部屋#Java]]&gt;[[MyBatis Tips]]</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>[[メインページ]]&gt;[[コンピュータの部屋#Java]]&gt;[[MyBatis Tips]]</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>==<del class="diffchange diffchange-inline">悲観ロックは単純にやってもうまくゆかない</del>==</div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">この記事では MyBatis で行ロックを使う方法を紹介します。</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>==<ins class="diffchange diffchange-inline">行ロック(悲観ロック)は単純にやってもうまくゆかない</ins>==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>テーブルの行を select ・・・ for update で行ロックして update 文で更新するのは</div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>テーブルの行を select ・・・ for update で行ロックして update 文で更新するのは</div></td></tr>
</table>
Nakamuri
//www.nakamuri.info/mw/index.php?title=MyBatis%E3%81%A7%E8%A1%8C%E3%83%AD%E3%83%83%E3%82%AF(%E6%82%B2%E8%A6%B3%E3%83%AD%E3%83%83%E3%82%AF)%E3%82%92%E8%A1%8C%E3%81%86%E3%81%AB%E3%81%AF%EF%BC%9F&diff=3598&oldid=prev
Nakamuri: ページの作成:「Category:コンピュータCategory:JavaCategory:MyBatis メインページ>コンピュータの部屋#Java>MyBatis Tips ==悲観ロック...」
2016-11-19T10:22:55Z
<p>ページの作成:「<a href="/mw/index.php/%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA:%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF" title="カテゴリ:コンピュータ">Category:コンピュータ</a><a href="/mw/index.php/%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA:Java" title="カテゴリ:Java">Category:Java</a><a href="/mw/index.php/%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA:MyBatis" title="カテゴリ:MyBatis">Category:MyBatis</a> <a href="/mw/index.php/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8" title="メインページ">メインページ</a>><a href="/mw/index.php/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AE%E9%83%A8%E5%B1%8B#Java" title="コンピュータの部屋">コンピュータの部屋#Java</a>><a href="/mw/index.php/MyBatis_Tips" title="MyBatis Tips">MyBatis Tips</a> ==悲観ロック...」</p>
<p><b>新規ページ</b></p><div>[[Category:コンピュータ]][[Category:Java]][[Category:MyBatis]]<br />
[[メインページ]]&gt;[[コンピュータの部屋#Java]]&gt;[[MyBatis Tips]]<br />
<br />
==悲観ロックは単純にやってもうまくゆかない==<br />
<br />
テーブルの行を select ・・・ for update で行ロックして update 文で更新するのは<br />
SQL の '''「悲観ロック」''' の常とう手段です。<br />
<br />
ただ、MyBatis では selecetステートメント(Mapperインターフェースの select用メソッド)で select ・・・ for update を実行し、<br />
updateステートメント(Mapperインターフェースの update用メソッド)で行を更新してもうまくゆかないことが多いです。 <br />
<br />
==うまくゆかない理由==<br />
<br />
多くのデータベースの既定のアイソレーションレベルは READ COMMITED です。<br />
<br />
READ COMMITEDでは行ロックの寿命はカーソルがその行に留まっている間です、しかし、MyBatis は select ステートメント<br />
を実行すると、カーソルも PreparedStatement もクローズしてしまいます。これでは行ロックが残る訳が有りません。<br />
<br />
==対処法==<br />
<br />
アイソレーションレベルを REPEATABLE_READ にします。<br />
アイソレーションレベルが REPEATABLE_READ なら、行ロックの寿命はトランザクションの終了(commit/rollback)までです。<br />
<br />
アイソレーションレベルは <br />
SqlSessionFactory#openSession の引数で指定できます。</div>
Nakamuri