Class AbstractSystematicDao<T extends jp.ecuacion.lib.jpa.entity.EclibEntity>

java.lang.Object
jp.ecuacion.util.jpa.dao.AbstractSystematicDao<T>
Direct Known Subclasses:
AbstractDao

public class AbstractSystematicDao<T extends jp.ecuacion.lib.jpa.entity.EclibEntity> extends Object
DBアクセス関連の共通処理を持つabstractクラス。

本クラスには、業務システムの観点を無視した観点のDAOの仕組みを持ち、AbstractDaoは、 論理削除やグループ指定などの、業務システムの観点を考慮したメソッドを持たせる。
1クラスにまとめると肥大化して存在意義が曖昧になるため2つに分けたが、本クラスはAbstractDao以外のクラスに継承されることを想定していない。
そのため、多くのメソッドが、scopeなし(同パッケージからのみ参照可能)で記述されている。

DBアクセスの実行の仕方は、大きく4つ。なんかjpaを採用したけど、jpa採用前から使用していたクエリ実行方式が減ってないような・・・
一方で、namedQueryは、クラス内にSQLを定義したり、orm.xmlという柔軟性に欠けたファイルに定義する必要があり実用的ではないので排除。 その代わりに、FWの初期から使用している.propertiesからの読み込みを採用する。(マクロ使用可能)
また、em.persist()などは、統一感がなくなる&他で代用できる&業務の考慮ができないので、使用しない。

つまり、以下が本frameworkでサポートするでサポートするDBアクセス方式。

  1. selectEntityByPk等の組み込み済みpublicメソッドと、...ByConditionsメソッドの使用(Criteria APIを内部的に使用)
  2. 自分でカスタマイズするcriteria query(本FWとしては、loggingとクエリ実行機能のみ提供)
  3. jpql.propertiesを読み込むjpql(prepared statement前提)
  4. nativesql.propertiesを読み込むnative sql(prepared statement前提)
(3, 4については、parameterはObject配列のみをサポート)

例えば「他グループのデータが取得されている個所があった、全体を見直すべし」というような事態となった際にも効率よく対応できるよう、 以下の考え方をとっている。 ・FWやBaseDaoで定義されているpublicのメソッドは、安全性が保証されているもの。そのような場合にも見直しの必要はなし (見直すのであれば、個別処理を見直すのではなくFW側の不具合を探すことになる) ・安全でない可能性のある処理は、FWでは実装せず、個別のDao内でメソッドを記述する必要がある形とする。 これにより、「安全でない処理を探すときは、個別dao内のみを探せばよく、blf等Daoの呼び出し元を見る必要はない」という状態を実現している。 (とは言え実装方法に依存する部分は残るが) そのために、2~4を実行するAPIはprotectedとなっている。

  • Field Details

    • slg

      protected jp.ecuacion.lib.core.logging.SqlLogger slg
      logger。
    • daoUtil

      protected jp.ecuacion.util.jpa.util.DaoUtil daoUtil
    • type

      protected Class<T extends jp.ecuacion.lib.jpa.entity.EclibEntity> type
      型変数Tを持つ裏技^^;。
  • Constructor Details

    • AbstractSystematicDao

      @SafeVarargs public AbstractSystematicDao(T... e)
      裏技コンストラクタ^^;。
  • Method Details

    • isSpringJpa

      protected boolean isSpringJpa()
    • insertAll

      public int insertAll(jakarta.persistence.EntityManager em, List<T> arr)
      insertAll insertは、業務的な制約に関係なく実施できる(他のグループのデータもinsertだけはできる)ものなので、public公開する。 insertと同様、他店の情報も登録できてしまうのは要改善か
    • updateWithJpqlFromProperties

      protected int updateWithJpqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params)
      jpqlでのデータ更新処理に使用。
    • updateWithSqlFromProperties

      protected int updateWithSqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params)
      sqlでのデータ更新処理に使用。
    • selectObjectWithJpqlFromProperties

      protected <E> E selectObjectWithJpqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params, Class<E> cls)
      .jpql.propertiesから取得したjpqlを実行し単一カラムのオブジェクトを返す共通処理。
    • selectObjectWithSqlFromProperties

      protected <E> E selectObjectWithSqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params, Class<E> cls)
      .nativesql.propertiesから取得したnative sqlを実行し単一カラムのオブジェクトを返す共通処理。
    • selectCountWithJpqlFromProperties

      protected Long selectCountWithJpqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params)
      .jpql.propertiesから取得したjpqlを実行し単一カラムのオブジェクトを返す共通処理。
    • selectCountWithSqlFromProperties

      protected Long selectCountWithSqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params)
      .nativesql.propertiesから取得したnative sqlを実行し単一カラムのオブジェクトを返す共通処理。
    • selectObjectListWithJpqlFromProperties

      protected <E> List<E> selectObjectListWithJpqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params, Class<E> cls)
      .jpql.propertiesから取得したjpqlを実行し単一カラムのオブジェクトのListを返す共通処理。
    • selectObjectListWithSqlFromProperties

      protected <E> List<E> selectObjectListWithSqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params, Class<E> cls)
      .navitesql.propertiesから取得したnative sqlを実行し単一カラムのオブジェクトのListを返す共通処理。
    • selectListOfObjectsWithJpqlFromProperties

      protected List<Object[]> selectListOfObjectsWithJpqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params)
      .jpql.propertiesから取得したjpqlを実行しObject[]のListを返す共通処理。処理が異なるので別扱いとする。
    • selectListOfObjectsWithSqlFromProperties

      protected List<Object[]> selectListOfObjectsWithSqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params)
      .navitesql.propertiesから取得したnative sqlを実行しObject[]ののListを返す共通処理。処理が異なるので別扱いとする。
    • selectContainerListWithJpqlFromProperties

      protected <E> List<E> selectContainerListWithJpqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params, Class<E> cls)
      .jpql.propertiesから取得したjpqlを実行しContainerを返す共通処理。Object配列で戻ってくるのをwrappingしているだけだが別途定義しておく。
    • selectContainerListWithSqlFromProperties

      protected <E> List<E> selectContainerListWithSqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params, Class<E> cls)
      .jpql.propertiesから取得したjpqlを実行しContainerを返す共通処理。Object配列で戻ってくるのをwrappingしているだけだが別途定義しておく。
    • selectEntityWithJpqlFromProperties

      protected T selectEntityWithJpqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params)
      .jpql.propertiesから取得したjpqlを実行し一つのentityを返す共通処理。
    • selectEntityWithSqlFromProperties

      protected T selectEntityWithSqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params)
      .nativesql.propertiesから取得したnative sqlを実行し一つのentityを返す共通処理。
    • selectEntityWithSqlFromProperties

      protected T selectEntityWithSqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params, SqlLogSuppressor logSuppressor)
      .nativesql.propertiesから取得したnative sqlを実行し一つのentityを返す共通処理。
    • selectEntityListWithJpqlFromProperties

      protected List<T> selectEntityListWithJpqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params)
      .jpql.propertiesから取得したjpqlを実行しentityのListを返す共通処理。
    • selectEntityListWithSqlFromProperties

      protected List<T> selectEntityListWithSqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params)
      .nativesql.propertiesから取得したnative sqlを実行しentityのListを返す共通処理。
    • getFieldPath

      protected jakarta.persistence.criteria.Path getFieldPath(jakarta.persistence.criteria.Root r, String fieldName)
      fieldInfoを引数に与えることで、そこからPathを取得して返す。 検索条件指定時やorder Byでの指定時に使用。
    • validate

      protected void validate(T e)