Class AbstractSystematicDao<T extends jp.ecuacion.lib.jpa.entity.EclibEntity>
- Direct Known Subclasses:
AbstractDao
本クラスには、業務システムの観点を無視した観点のDAOの仕組みを持ち、AbstractDaoは、 論理削除やグループ指定などの、業務システムの観点を考慮したメソッドを持たせる。
1クラスにまとめると肥大化して存在意義が曖昧になるため2つに分けたが、本クラスはAbstractDao以外のクラスに継承されることを想定していない。
そのため、多くのメソッドが、scopeなし(同パッケージからのみ参照可能)で記述されている。
DBアクセスの実行の仕方は、大きく4つ。なんかjpaを採用したけど、jpa採用前から使用していたクエリ実行方式が減ってないような・・・
一方で、namedQueryは、クラス内にSQLを定義したり、orm.xmlという柔軟性に欠けたファイルに定義する必要があり実用的ではないので排除。
その代わりに、FWの初期から使用している.propertiesからの読み込みを採用する。(マクロ使用可能)
また、em.persist()などは、統一感がなくなる&他で代用できる&業務の考慮ができないので、使用しない。
つまり、以下が本frameworkでサポートするでサポートするDBアクセス方式。
- selectEntityByPk等の組み込み済みpublicメソッドと、...ByConditionsメソッドの使用(Criteria APIを内部的に使用)
- 自分でカスタマイズするcriteria query(本FWとしては、loggingとクエリ実行機能のみ提供)
- jpql.propertiesを読み込むjpql(prepared statement前提)
- nativesql.propertiesを読み込むnative sql(prepared statement前提)
例えば「他グループのデータが取得されている個所があった、全体を見直すべし」というような事態となった際にも効率よく対応できるよう、 以下の考え方をとっている。 ・FWやBaseDaoで定義されているpublicのメソッドは、安全性が保証されているもの。そのような場合にも見直しの必要はなし (見直すのであれば、個別処理を見直すのではなくFW側の不具合を探すことになる) ・安全でない可能性のある処理は、FWでは実装せず、個別のDao内でメソッドを記述する必要がある形とする。 これにより、「安全でない処理を探すときは、個別dao内のみを探せばよく、blf等Daoの呼び出し元を見る必要はない」という状態を実現している。 (とは言え実装方法に依存する部分は残るが) そのために、2~4を実行するAPIはprotectedとなっている。
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected jakarta.persistence.criteria.PathgetFieldPath(jakarta.persistence.criteria.Root r, String fieldName) fieldInfoを引数に与えることで、そこからPathを取得して返す。intinsertAll insertは、業務的な制約に関係なく実施できる(他のグループのデータもinsertだけはできる)ものなので、public公開する。protected booleanprotected <E> List<E> selectContainerListWithJpqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params, Class<E> cls) .jpql.propertiesから取得したjpqlを実行しContainerを返す共通処理。protected <E> List<E> selectContainerListWithSqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params, Class<E> cls) .jpql.propertiesから取得したjpqlを実行しContainerを返す共通処理。protected LongselectCountWithJpqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params) .jpql.propertiesから取得したjpqlを実行し単一カラムのオブジェクトを返す共通処理。protected LongselectCountWithSqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params) .nativesql.propertiesから取得したnative sqlを実行し単一カラムのオブジェクトを返す共通処理。selectEntityListWithJpqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params) .jpql.propertiesから取得したjpqlを実行しentityのListを返す共通処理。selectEntityListWithSqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params) .nativesql.propertiesから取得したnative sqlを実行しentityのListを返す共通処理。protected TselectEntityWithJpqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params) .jpql.propertiesから取得したjpqlを実行し一つのentityを返す共通処理。protected TselectEntityWithSqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params) .nativesql.propertiesから取得したnative sqlを実行し一つのentityを返す共通処理。protected TselectEntityWithSqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params, SqlLogSuppressor logSuppressor) .nativesql.propertiesから取得したnative sqlを実行し一つのentityを返す共通処理。selectListOfObjectsWithJpqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params) .jpql.propertiesから取得したjpqlを実行しObject[]のListを返す共通処理。selectListOfObjectsWithSqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params) .navitesql.propertiesから取得したnative sqlを実行しObject[]ののListを返す共通処理。protected <E> List<E> selectObjectListWithJpqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params, Class<E> cls) .jpql.propertiesから取得したjpqlを実行し単一カラムのオブジェクトのListを返す共通処理。protected <E> List<E> selectObjectListWithSqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params, Class<E> cls) .navitesql.propertiesから取得したnative sqlを実行し単一カラムのオブジェクトのListを返す共通処理。protected <E> EselectObjectWithJpqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params, Class<E> cls) .jpql.propertiesから取得したjpqlを実行し単一カラムのオブジェクトを返す共通処理。protected <E> EselectObjectWithSqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params, Class<E> cls) .nativesql.propertiesから取得したnative sqlを実行し単一カラムのオブジェクトを返す共通処理。protected intupdateWithJpqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params) jpqlでのデータ更新処理に使用。protected intupdateWithSqlFromProperties(jakarta.persistence.EntityManager em, String sqlId, Object[] params) sqlでのデータ更新処理に使用。protected void
-
Field Details
-
slg
protected jp.ecuacion.lib.core.logging.SqlLogger slglogger。 -
daoUtil
protected jp.ecuacion.util.jpa.util.DaoUtil daoUtil -
type
型変数Tを持つ裏技^^;。
-
-
Constructor Details
-
AbstractSystematicDao
裏技コンストラクタ^^;。
-
-
Method Details
-
isSpringJpa
protected boolean isSpringJpa() -
insertAll
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
-