[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 メーリングリストの案内