モジュール jp.ecuacion.splib.web
インタフェース SplibJpaServiceInterface<E extends jp.ecuacion.lib.jpa.entity.AbstractEntity>
- 既知の実装クラスのリスト:
SplibEditJpaService,SplibGeneralJpaService,SplibSearchListJpaService
public interface SplibJpaServiceInterface<E extends jp.ecuacion.lib.jpa.entity.AbstractEntity>
-
メソッドの概要
修飾子とタイプメソッド説明default EfindAndOptimisticLockingCheck(String idOfRootRecord, String... versionsInScreen) 一覧画面から単票画面への遷移・編集時・削除時などで、楽観的排他制御チェックを行う処理。findAndOptimisticLockingCheck() にて使用。String[]findAndOptimisticLockingCheck()にて使用。
-
メソッドの詳細
-
getRepositoryForOptimisticLocking
SplibRepository<E,Long> getRepositoryForOptimisticLocking()findAndOptimisticLockingCheck() にて使用。selectのためのrepositoryを取得。 -
getVersionsForOptimisticLocking
findAndOptimisticLockingCheck()にて使用。楽観的排他制御のためのversionを取得。findAndOptimisticLockingCheck(String, String...)を参照 -
findAndOptimisticLockingCheck
default E findAndOptimisticLockingCheck(String idOfRootRecord, String... versionsInScreen) throws jp.ecuacion.lib.core.exception.checked.AppException 一覧画面から単票画面への遷移・編集時・削除時などで、楽観的排他制御チェックを行う処理。併せてDBからentityを取得する。 本メソッド内で、あらかじめ画面表示の際に取得しhtml内に埋めたversionと別途本処理の中で取得したentityのversion比較を行う。 現時点での差異確認は行うが、その後目的を達成するまでには、もう一度楽観的チェックが行われるので、必ず本メソッドの戻り値として取得するentityを後続で使用すること。 (たとえばデータupdate時は、本チェックでversionに差異がないことを確認した後、update処理実施までに他のユーザからupdateされた場合もエラーとする必要があるため。)比較するversionは、1テーブルの場合は1つのversionを普通に格納すれば良いのだが、 複数テーブルを一度に更新する場合などは、そのそれぞれのテーブルのversionを比較する必要が出る。それも踏まえて配列形式でversionを保持している。 (それぞれのstring要素の中に、カンマ区切りなどで複数の要素を持つこともできるのだが、区切り文字などを気にしなくて良いように配列で持っている。 二次元配列でないと必要なversionを保持できないような場合は、カンマ区切りなどで複数の値を一つの要素に入れること。)
その場合、画面上では複数の値を持つのでそれらをString配列に入れ、DBから取得するersionの値も同じ形にしてstring配列で比較を行う。 尚、どのテーブルを更新するか否かに関わらず、どれかひとつでもversionにずれがあればエラーとする仕様。 そもそも頻度が高いわけではないので、他のテーブルだろうと更新があったら確認し直してから行更新してくれ、と。
relationのないテーブルも同時に更新する場合などは、getVersionsForOptimisticLocking(E e) だけでは情報不足なので、 呼ばれた先でさらに値を取得する必要がある。その追加取得したentityも、後続処理で使用する必要があるため注意。
- 例外:
jp.ecuacion.lib.core.exception.checked.AppException
-