Seasar DI Container with AOP

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()