Interface SplibJpaServiceInterface<E extends jp.ecuacion.lib.jpa.entity.EclibEntity>

Type Parameters:
E - entity
All Known Implementing Classes:
SplibEditJpaService, SplibGeneralJpaService, SplibSearchListJpaService

public interface SplibJpaServiceInterface<E extends jp.ecuacion.lib.jpa.entity.EclibEntity>
Is used for optimistic locking procedure with JPA.
  • Method Details

    • getRepositoryForOptimisticLocking

      SplibRepository<E,Long> getRepositoryForOptimisticLocking()
      Is used for findAndOptimisticLockingCheck().

      It obtains the repository for select record from database. See findAndOptimisticLockingCheck(String, String...).

      Returns:
      repository
    • getVersionsForOptimisticLocking

      String[] getVersionsForOptimisticLocking(E e)
      Is used for findAndOptimisticLockingCheck().

      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