[Seasar-user:12179] [DBFlute]OutsideSql.autoPaging について

Shibuya [E-MAIL ADDRESS DELETED]
2007年 12月 18日 (火) 16:42:52 JST


お世話になっております。渋谷です。

先日リリースされました、DBFlute-0.5.8 の OutsideSqlを試していたところ、
xxxBhv.outsideSql().autoPaging().selectPage(path, pmb, entityType) を
正常に動かすことができませんでした。

autoPaging は ResultSetによる絞込みを利用するとありましたので、
外出しSQLでは絞込みを行っておりません。
何か設定等不足している点がありますでしょうか。

以下に、現状を記載いたします。
(OfficeUserBean, OfficeUserPmb 等の自動生成ソースに
 手は加えておりませんので、割愛させていただきます)

----------------------------------------
【環境】

  S2.4.18
  s2-dao-1.0.47
  dbflute-0.5.8

----------------------------------------
【現象】

  PagingResultBean.getSelectedList.size の結果が、
 Pmb.fetchFirst の値と等しくなく、全件が取得されている。

 ただし、PagingResultBean.getCurrentPageNumber は、
 Pmb.fetchPage で指定した値に等しい

----------------------------------------
【外出しSQL】

    --#OfficeUserBean#
    --*USER_ID, OFFICE_ID*

    --!OfficeUserPmb extends SPB!
    --!!String userId!!
    --!!String userName!!
    --!!String officeId!!
    --!!String officeName!!
    SELECT
    /*IF pmb.isPaging()*/
        U.USER_ID
        , U.USER_NAME
        , O.OFFICE_ID
        , O.OFFICE_NAME
    -- ELSE count(*)
    /*END*/
    FROM
        USER_MSTR       U
        , OFFICE_MSTR   O
    WHERE
        U.BELONG_ID = O.OFFICE_ID
        /*IF pmb.userId != null*/       AND U.USER_ID LIKE '%' ||
/*pmb.userId*/'U' || '%'    /*END*/
        /*IF pmb.userName != null*/     AND U.USER_NAME LIKE '%' ||
/*pmb.userName*/'U' || '%'  /*END*/
        /*IF pmb.officeId != null*/     AND O.OFFICE_ID LIKE '%' ||
/*pmb.officeId*/'O' || '%'  /*END*/
        /*IF pmb.officeName != null*/   AND O.OFFICE_NAME LIKE '%' ||
/*pmb.officeName*/'O' || '%'/*END*/
    ORDER BY
        U.USER_ID
        , O.OFFICE_ID
    ;

----------------------------------------
【JUnit】

  --------------------
  ■テストケース

    public void test_outsideSql_selectOfficeUser_Tx() throws Exception {
        // ## Arrange ##
        // SQLのパス
        String path = "sql/UserMstrDao_selectOfficeUser.sql";

        // 検索条件
        OfficeUserPmb pmb = new OfficeUserPmb();
        pmb.setUserId("xxx");

        pmb.fetchFirst(5);
        pmb.fetchPage(2);

        // 戻り値Entityの型
        Class<OfficeUserBean> entityType = OfficeUserBean.class;

        // ## Act ##
        // SQL実行!
        PagingResultBean<OfficeUserBean> pagingResult
            = userMstrBhv.outsideSql().autoPaging().selectPage(path,
pmb, entityType);

        for (OfficeUserBean entity : pagingResult.getSelectedList()) {
            log.debug(entity.toString());
            assertNotNull(entity.getUserId());
            assertNotNull(entity.getOfficeId());
        }

        assertEquals("ページNO", pagingResult.getCurrentPageNumber(), 2);
        assertEquals("1件あたりの表示件数",
pagingResult.getSelectedList().size(), 5);
    }

  --------------------
  ■結果

    junit.framework.AssertionFailedError: 1件あたりの表示件数
expected:<22> but was:<5>
        at junit.framework.Assert.fail(Assert.java:47)
        at junit.framework.Assert.failNotEquals(Assert.java:280)
    … (略) …

----------------------------------------
【ログ】

    INFO  xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor - /* * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
{DBFlute}
    INFO  xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor -
[XADataSource]: [E-MAIL ADDRESS DELETED]
    INFO  xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor -     driver
= oracle.jdbc.driver.OracleDriver
    INFO  xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor -     url
= jdbc:oracle:thin:@xxx
    INFO  xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor -     user
= user
    INFO  xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor -
[StatementFactory]:
[E-MAIL ADDRESS DELETED]
    INFO  xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor -
[ResultSetFactory]:
[E-MAIL ADDRESS DELETED]
    DEBUG xxx.dao.dbflute.allcommon.cbean.ConditionBeanContext -
/---------------------------------------- Initialize against the
ClassLoader Headache!
    DEBUG xxx.dao.dbflute.allcommon.cbean.ConditionBeanContext -
...Loading class of xxx.dao.dbflute.allcommon.cbean.SimplePagingBean:
sun.misc.Launcher$[E-MAIL ADDRESS DELETED]
    DEBUG xxx.dao.dbflute.allcommon.cbean.ConditionBeanContext -
...Loading class of
xxx.dao.dbflute.allcommon.cbean.coption.FromToOption:
sun.misc.Launcher$[E-MAIL ADDRESS DELETED]
    DEBUG xxx.dao.dbflute.allcommon.cbean.ConditionBeanContext -
...Loading class of
xxx.dao.dbflute.allcommon.cbean.coption.LikeSearchOption:
sun.misc.Launcher$[E-MAIL ADDRESS DELETED]
    DEBUG xxx.dao.dbflute.allcommon.cbean.ConditionBeanContext -
...Loading class of
xxx.dao.dbflute.allcommon.cbean.coption.InScopeOption:
sun.misc.Launcher$[E-MAIL ADDRESS DELETED]
    DEBUG xxx.dao.dbflute.allcommon.cbean.ConditionBeanContext -
...Loading class of
xxx.dao.dbflute.allcommon.cbean.grouping.GroupingOption:
sun.misc.Launcher$[E-MAIL ADDRESS DELETED]
    DEBUG xxx.dao.dbflute.allcommon.cbean.ConditionBeanContext -
...Loading class of
xxx.dao.dbflute.allcommon.cbean.grouping.GroupingRowEndDeterminer:
sun.misc.Launcher$[E-MAIL ADDRESS DELETED]
    DEBUG xxx.dao.dbflute.allcommon.cbean.ConditionBeanContext -
...Loading class of
xxx.dao.dbflute.allcommon.cbean.grouping.GroupingRowResource:
sun.misc.Launcher$[E-MAIL ADDRESS DELETED]
    DEBUG xxx.dao.dbflute.allcommon.cbean.ConditionBeanContext -
...Loading class of
xxx.dao.dbflute.allcommon.cbean.grouping.GroupingRowSetupper:
sun.misc.Launcher$[E-MAIL ADDRESS DELETED]
    DEBUG xxx.dao.dbflute.allcommon.cbean.ConditionBeanContext -
...Loading class of
xxx.dao.dbflute.allcommon.cbean.pagenavi.PageNumberLink:
sun.misc.Launcher$[E-MAIL ADDRESS DELETED]
    DEBUG xxx.dao.dbflute.allcommon.cbean.ConditionBeanContext -
...Loading class of
xxx.dao.dbflute.allcommon.cbean.pagenavi.PageNumberLinkSetupper:
sun.misc.Launcher$[E-MAIL ADDRESS DELETED]
    DEBUG xxx.dao.dbflute.allcommon.cbean.ConditionBeanContext -
...Loading class of xxx.dao.dbflute.allcommon.jdbc.CursorHandler:
sun.misc.Launcher$[E-MAIL ADDRESS DELETED]
    DEBUG xxx.dao.dbflute.allcommon.cbean.ConditionBeanContext - ----------/
    INFO  xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor -
...Initializing database product name from driverClassName: oracle
    INFO  xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor - * * * * */
    DEBUG xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor -
/===============================================================================
    DEBUG xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor -
                                           OutsideSqlDao.selectList()
    DEBUG xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor -
                                           =========================/
    DEBUG xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor - OutsideSql:
sql/UserMstrDao_selectOfficeUser.sql
    DEBUG xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor - SqlCommand
Initialization Cost: [00m00s375ms]
    DEBUG org.seasar.extension.jdbc.impl.BasicHandler - --#OfficeUserBean#
    --*USER_ID, OFFICE_ID*

    --!OfficeUserPmb extends SPB!
    --!!String userId!!
    --!!String userName!!
    --!!String officeId!!
    --!!String officeName!!
    SELECT
    count(*)
    FROM
        USER_MSTR       U
        , OFFICE_MSTR   O
    WHERE
        U.BELONG_ID = O.OFFICE_ID
        AND U.USER_ID LIKE '%' ||       'xxx' || '%'
    ORDER BY
        U.USER_ID
        , O.OFFICE_ID

    DEBUG xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor -
===========/ [00m00s641ms - Selected count: 22]
    DEBUG xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor -
    DEBUG xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor -
/===============================================================================
    DEBUG xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor -
                                           OutsideSqlDao.selectList()
    DEBUG xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor -
                                           =========================/
    DEBUG xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor - OutsideSql:
sql/UserMstrDao_selectOfficeUser.sql
    DEBUG xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor - SqlCommand
Initialization Cost: [00m00s031ms]
    DEBUG org.seasar.extension.jdbc.impl.BasicHandler - --#OfficeUserBean#
    --*USER_ID, OFFICE_ID*

    --!OfficeUserPmb extends SPB!
    --!!String userId!!
    --!!String userName!!
    --!!String officeId!!
    --!!String officeName!!
    SELECT
        U.USER_ID
        , U.USER_NAME
        , O.OFFICE_ID
        , O.OFFICE_NAME
    FROM
        USER_MSTR       U
        , OFFICE_MSTR   O
    WHERE
        U.BELONG_ID = O.OFFICE_ID
        AND U.USER_ID LIKE '%' ||       'xxx' || '%'
    ORDER BY
        U.USER_ID
        , O.OFFICE_ID

    DEBUG xxx.dao.dbflute.allcommon.s2dao.S2DaoInterceptor -
===========/ [00m00s078ms - Selected list: 22 first={xxxxx,xxxxx名称,
OFC0015,OFC0015}]
    … (略) …

----------------------------------------

お手数をおかけして申し訳ありませんが、
お気づきの点等ございましたらご教授いただけませんでしょうか。
また、不備・不足情報等ありましたらご指摘ください。

どうぞよろしくお願いいたします。


Seasar-user メーリングリストの案内