[Seasar-user:10322] Re: [DBFlute] 識別子が長すぎるを解決したい

Junichi Kato [E-MAIL ADDRESS DELETED]
2007年 9月 5日 (水) 11:37:37 JST


加藤です.

うーん,DBFluteを作っている感があって楽しい^^;

On Wed, 05 Sep 2007 11:19:26 +0900
kubo <[E-MAIL ADDRESS DELETED]> wrote:

> 久保です。
> 
> > UserAccountByUserAccountId.USER_ACCOUNT_ID = dbfluteRelno4_n2.USER_ACCOUNT_ID  where ADMIN.ADMIN_CODE = 'ADMIN1' and AdministratorConfigAsOne.DISABLE = 'N' and dbfluteRelno4_n2.ACCOUNT_STATUS = 'A'
> > DEBUG 2007-09-05 10:27:49,605 [main] 論理的なコネクションを閉じました。tx={0}
> > DEBUG 2007-09-05 10:27:49,605 [main] ===========/ [00m01s682ms - Selected count: 0]
> > DEBUG 2007-09-05 10:27:49,605 [main]  
> > ListResultBean<Administrator> list =  tableDbName=ADMIN allRecordCount=ADMIN selectedList.size()=0 orderByClause=[]
> > DEBUG 2007-09-05 10:27:49,607 [main] トランザクションをロールバックしました。tx={0}
> > DEBUG 2007-09-05 10:27:49,611 [main] 物理的なコネクションを閉じました
> > DEBUG 2007-09-05 10:27:49,615 [main] 環境変数#Envにファイル(env.txt)から値(ut)が設定されました
> > 
> > 何かわかりますでしょうか?
> 
> ありがとうございます。
> とりあえず、S2DaoのDaoインターフェイスで取得した時点で、
> 0件ということがわかりました。
> (S2DaoのSqlCommandの戻りが0件になっています)
> 
> 
> 五月雨で申し訳ありませんが、
> allcommon.s2dao.FetchNarrowingResultSetFactoryに
> createResultSet()というメソッドがあるのですが、
> そのメソッドに以下の処理を追加して実行して頂けませんでしょうか?
> (ここから〜ここまで部分をそのままコピーして追加して下さい。)
> 
>     public java.sql.ResultSet createResultSet(java.sql.PreparedStatement ps) {
>         ここから
>         try {
>             ParameterMetaData parameterMetaData = ps.getParameterMetaData();
>             System.out.println(ps.toString());
>             System.out.println(parameterMetaData.toString());
>             final java.sql.ResultSet resultSet = PreparedStatementUtil.executeQuery(ps);
>             int count = 0;
>             while (resultSet.next()) {
>                 count++;
>             }
>             System.out.println("*******************************************");
>             System.out.println("結果は[" + count + "]件だった");
>             System.out.println("*******************************************");
>         } catch (SQLException e) {
>             throw new RuntimeException(e);
>         }
>         ここまで
> 
> もし、ここで0件であれば、SQLの実行で0件になってしまっていて、
> 1件取得できるのであれば、ResultSetを回す処理の中で何かの間違いが
> 発生してしまっていることになります。

このようにしてみたのですが,
public java.sql.ResultSet createResultSet(java.sql.PreparedStatement ps) {
	long before = 0;
	if (_internalDebug && _log.isDebugEnabled()) {
		before = System.currentTimeMillis();
	}
	java.sql.ResultSet resultSet = null;
	try {
		ParameterMetaData parameterMetaData = ps.getParameterMetaData();
		System.out.println(ps.toString());
		System.out.println(parameterMetaData.toString());
		resultSet = PreparedStatementUtil.executeQuery(ps);
		int count = 0;
		while (resultSet.next()) {
			count++;
		}
		System.out.println("*******************************************");
		System.out.println("結果は[" + count + "]件だった");
		System.out.println("*******************************************");
	} catch (SQLException e) {
		throw new RuntimeException(e);
	}
	// final java.sql.ResultSet resultSet = PreparedStatementUtil
	// .executeQuery(ps);

	if (_internalDebug && _log.isDebugEnabled()) {
		final long after = System.currentTimeMillis();
		_log.debug("Pure Query Cost: ["
				+ getPerformanceView(after - before) + "]");
	}

	if (!FetchNarrowingBeanContext.isExistFetchNarrowingBeanOnThread()) {
		return resultSet;
	}
	final FetchNarrowingBean cb = FetchNarrowingBeanContext
			.getFetchNarrowingBeanOnThread();
	if (!isUseFetchNarrowingResultSetWrapper(cb)) {
		return resultSet;
	}
	final FetchNarrowingResultSetWrapper wrapper = new FetchNarrowingResultSetWrapper(
			resultSet, cb);
	if (OutsideSqlContext.isExistOutsideSqlContextOnThread()) {
		final OutsideSqlContext outsideSqlContext = OutsideSqlContext
				.getOutsideSqlContextOnThread();
		wrapper.setOffsetByCursorForcedly(outsideSqlContext
				.isOffsetByCursorForcedly());
		wrapper.setLimitByCursorForcedly(outsideSqlContext
				.isLimitByCursorForcedly());
	}

	return wrapper;
}

ParameterMetaData parameterMetaData = ps.getParameterMetaData();

を呼び出した時点で,SSQLExceptionが発生してますね.

DEBUG 2007-09-05 11:32:13,150 [main] SqlCommand Initialization Cost: [00m01s356ms]
DEBUG 2007-09-05 11:32:13,775 [main] 論理的なコネクションを取得しました。tx={0}
DEBUG 2007-09-05 11:32:13,780 [main] select ADMIN.ADMIN_ID, ADMIN.ADMIN_CODE, ADMIN.USER_ACCOUNT_ID, ADMIN.TEST_TYPE, ADMIN.CREATER_ID, ADMIN.UPDATER_ID, ADMIN.CREATE_DATE, ADMIN.UPDATE_DATE  from ADMIN left outer join ADMIN_CONFIG AdministratorConfigAsOne on ADMIN.ADMIN_ID = AdministratorConfigAsOne.ADMIN_ID left outer join USER_ACCOUNT UserAccountByUserAccountId on ADMIN.USER_ACCOUNT_ID = UserAccountByUserAccountId.USER_ACCOUNT_ID left outer join USER_ACCOUNT_CONFIG dbfluteRelno4_n2 on UserAccountByUserAccountId.USER_ACCOUNT_ID = dbfluteRelno4_n2.USER_ACCOUNT_ID  where ADMIN.ADMIN_CODE = 'ADMIN1' and AdministratorConfigAsOne.DISABLE = 'N' and dbfluteRelno4_n2.ACCOUNT_STATUS = 'A'
DEBUG 2007-09-05 11:32:26,476 [main] 論理的なコネクションを閉じました。tx={0}
INFO  2007-09-05 11:32:26,476 [main] Dao threw the exception: class java.lang.RuntimeException msg=org.seasar.framework.exception.SSQLException: [ESSR0072]SQLで例外(SQL=[select ADMIN.ADMIN_ID, ADMIN.ADMIN_CODE, ADMIN.USER_ACCOUNT_ID, ADMIN.TEST_TYPE, ADMIN.CREATER_ID, ADMIN.UPDATER_ID, ADMIN.CREATE_DATE, ADMIN.UPDATE_DATE  from ADMIN left outer join ADMIN_CONFIG AdministratorConfigAsOne on ADMIN.ADMIN_ID = AdministratorConfigAsOne.ADMIN_ID left outer join USER_ACCOUNT UserAccountByUserAccountId on ADMIN.USER_ACCOUNT_ID = UserAccountByUserAccountId.USER_ACCOUNT_ID left outer join USER_ACCOUNT_CONFIG dbfluteRelno4_n2 on UserAccountByUserAccountId.USER_ACCOUNT_ID = dbfluteRelno4_n2.USER_ACCOUNT_ID  where ADMIN.ADMIN_CODE = ? and AdministratorConfigAsOne.DISABLE = ? and dbfluteRelno4_n2.ACCOUNT_STATUS = ?], Message=[17023], ErrorCode=null, SQLState={3})が発生しました
INFO  2007-09-05 11:32:26,477 [main]     method   --> public abstract java.util.List org.example.common.dbflute.bsdao.BsAdminDao.selectList(bz.brave.example.common.dbflute.cbean.AdminCB)
INFO  2007-09-05 11:32:26,477 [main]     argument --> /* df:includeSelectClause */  from ADMIN left outer join ADMIN_CONFIG AdministratorConfigAsOne on ADMIN.ADMIN_ID = AdministratorConfigAsOne.ADMIN_ID left outer join USER_ACCOUNT UserAccountByUserAccountId on ADMIN.USER_ACCOUNT_ID = UserAccountByUserAccountId.USER_ACCOUNT_ID left outer join USER_ACCOUNT_CONFIG dbfluteRelno4_n2 on UserAccountByUserAccountId.USER_ACCOUNT_ID = dbfluteRelno4_n2.USER_ACCOUNT_ID  where ADMIN.ADMIN_CODE = /*dto.conditionQuery.administratorCode.equal*/null and AdministratorConfigAsOne.DISABLE = /*dto.conditionQuery.conditionQueryAdministratorConfigAsOne.disable.equal*/null and dbfluteRelno4_n2.ACCOUNT_STATUS = /*dto.conditionQuery.conditionQueryUserAccountByUserAccountId.conditionQueryUserAccountConfigByUserAccountIdAsOne.accountStatus.equal*/null 
DEBUG 2007-09-05 11:32:26,486 [main] トランザクションをロールバックしました。tx={0}
DEBUG 2007-09-05 11:32:26,493 [main] 物理的なコネクションを閉じました
DEBUG 2007-09-05 11:32:26,511 [main] 環境変数#Envにファイル(env.txt)から値(ut)が設定されました



───────────────────────────────
 株式会社 グランテック
 代表取締役社長
 加藤 潤一 Junichi Kato

〒154-0012
東京都世田谷区駒沢2-16-1 サンドー駒沢ビル4F
TEL 050-5538-2383  FAX 03-3487-7211
HP : http://www.grandtech.jp/
BLOG : http://d.hatena.ne.jp/j5ik2o/
E-MAIL : [E-MAIL ADDRESS DELETED]




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