|
to Top
BehaviorのMethodの用途別概要を記述します。
// ======================================================================================================
// Behavior - 用途別Method概要
// ===========================
# -------------------------------------------------
# Select Count
# ------------
ConditionBeanによるCount検索:
→ selectCount()
もし、引数のConditionBeanに fetchFirst()やfetchPage()などが呼び出されていて
ConditionBeanのFetchScope設定が有効な場合、このMethodはその設定を無視して処理します。
例えば、342件取得できるはずのConditionBeanの検索条件にfetchFirst(20)/fetchPage(5)と設定されていた場合
このConditionBeanでselectCount()を呼び出すと、342件が取得されます。
※DBFluteの独自用語として、このことを IgnoreFetchScope と言います。
# -------------------------------------------------
# Select Entity
# -------------
ConditionBeanによるEntity検索:
→ selectEntity()
該当の条件にHITするRecordが無い場合はNullが戻ります。
該当の条件にHITするRecordが複数件の場合は例外が発生します。
ConditionBeanによる「nullを期待しない」Entity検索:
→ selectEntityWithDeletedCheck()
該当の条件にHITするRecordが無い場合は例外が発生します。
該当の条件にHITするRecordが複数件の場合は例外が発生します。
PrimaryKeyによる「nullを期待しない」Entity検索:
→ selectByPKValueWithDeletedCheck()
selectEntityWithDeletedCheck()の引数がPrimaryKeyになったものです。
オーバーロードは利用せずに、明示的にMethod名を変えています。
PrimaryKeyによる「更新Lock付きでnullを期待しない」Entity検索:
→ selectByPKValueWithDeletedCheckForUpdate()
selectByPKValueWithDeletedCheck()に更新Lockを付与したものです。
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
delegateSelectEntity()を直接呼び出すことはお奨めしません。
delegateSelectEntity()はS2DaoのMethodをそのまま呼び出しています。
S2Dao仕様では、該当条件に複数件HITする場合に先頭の一件目を戻すようになっています。
これは便利な時もありますが、思わぬBUGを生み出すこともあります。
なので、安全のためにBehaviorが提供するEntity検索Methodは、全て複数件HIT時に例外を発生させます。
もし、「明示的に複数件HITする中での先頭の一件が欲しい」という要件がある場合は、
以下のようにConditionBeanを設定して下さい。
/- - - - - - - - - - - - - - - - - - - - - - - - - -
final LdBookCB cb = new LdBookCB();
cb.query().setXxx...(xxx);
cb.query().addOrderBy_Xxx_Asc();
cb.fetchFirst(1); // ☆
final Book entity = bookBhv.selectEntity(cb);
- - - - - -/
すると、複数件HITする条件の中のSortされた上での一件目が取得できます。
delegateXxx()がpublicメソッドである理由は、Interceptorを仕掛けるためです。
将来的にprotectedにする可能性もあります。InternalなMethodという認識でいて下さい。
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
# -------------------------------------------------
# Select List
# -----------
ConditionBeanによる「ListResultBeanを戻り値とした」List検索:
→ selectList()
ReturnType: ListResultBean (implements java.util.List)
ListResultBeanは、java.util.Listをimplementsしているため、通常のListとして扱うことが可能です。
ListResultBeanである必要がないときあるときに関わらず、「一覧検索は一律このMethodを利用する」でOKです。
☆このように記述可能です。
/- - - - - - - - - - - - - - - - - - - - - - - - - - - -
final ListResultBean<LdBook> bookList = bookBhv.selectList(cb);
for (Book entity : bookList) {
entity.getXxx...
}
- - - - - - - - - -/
ConditionBeanによる「PagingResultBeanを戻り値とした」Paging検索:
→ selectPage()
ReturnType: PagingResultBean (extends ListResultBean)
※詳細は、Tips: Paging にて
# -------------------------------------------------
# Sequence
# --------
SequenceのNextVal取得:
→ selectNextVal()
※該当Tableに対してSequenceを関連付けている場合に生成されます。
Tips: Sequence
# -------------------------------------------------
# Entity Insert
# -------------
通常の登録:
→ insert()
該当のRecordが既に存在する場合は一意制約違反のSQLExceptionが発生します。
# -------------------------------------------------
# Entity Update
# -------------
通常の更新:
→ update()
EntityのSetterが呼び出されたColumnだけがUpdate文のSet句に指定されます。
0件更新時は例外が発生します。
VersionNoやTimestampを設定している場合は、更新時に排他制御が実行されます。
引数のEntityは、newして値をSetしたもので構いません。
但し、VersionNoやTimestampをEntityに設定している場合で、引数のEntityのそれらの値が null の場合は、
0件更新となり更新に失敗します(S2Daoの仕様)。
【注意】(2007/01/04)
C#版S2Daoは、Update文のSet句に全てのColumnが指定されます。
よって、引数のEntityは、newして値をSetしたものだと意図せず null で更新されてしまう可能性があります。
なのでC#版では、一律updateAfterSelect()を利用することをお奨めします。
制限なしの更新:
→ updateNonstrict()
update()との違いは、
☆VersionNoやTimestampを設定していても排他制御は実行されない☆
ことです。
主に排他制御の不要なCumsumer向けApplicationやBatch処理などに利用されます。(無論要件次第です)
後は update() と同様です。
【注意】(2007/04/04)
現時点でJava版のみのSupportとなります。また、DBFlute-0.4.4以降限定です。
なければ登録あれば制限なしの更新:
→ insertOrUpdateNonStrict()
主に外部SystemからのDataを夜間に取り込むBatchなどで利用されます。
# -------------------------------------------------
# Entity Delete
# -------------
通常の削除:
→ delete()
|