Interface SplibJpaServiceInterface<E extends jp.ecuacion.lib.jpa.entity.EclibEntity>
- Type Parameters:
E- entity
- All Known Implementing Classes:
SplibEditJpaService, SplibGeneralJpaService, SplibSearchListJpaService
-
Method Summary
Modifier and TypeMethodDescriptiondefault EfindAndOptimisticLockingCheck(String idOfRootRecord, String... versionsInScreen) 一覧画面から単票画面への遷移・編集時・削除時などで、楽観的排他制御チェックを行う処理。Is used forfindAndOptimisticLockingCheck().String[]Is used forfindAndOptimisticLockingCheck().
-
Method Details
-
getRepositoryForOptimisticLocking
SplibRepository<E,Long> getRepositoryForOptimisticLocking()Is used forfindAndOptimisticLockingCheck().It obtains the repository for select record from database. See
findAndOptimisticLockingCheck(String, String...).- Returns:
- repository
-
getVersionsForOptimisticLocking
Is used forfindAndOptimisticLockingCheck().It obtains the versions for optimistic exclusive control. See
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も、後続処理で使用する必要があるため注意。
- Throws:
jp.ecuacion.lib.core.exception.checked.AppException
-