[Seasar-user:16663] Re: 再発! Pagerのoffset値がレコード件数より大きい場合にSQLExceptionが発生する問題

Oonaka Hiroyuki [E-MAIL ADDRESS DELETED]
2009年 1月 13日 (火) 23:51:21 JST


大中(せと)です。

j2ee.diconが見れないので推測まじりになりますが...

> 	<component
> 		class="org.seasar.dao.impl.DaoMetaDataFactoryImpl">
> 		<arg>j2ee.dataSource</arg>
> 		<arg>
> 			<component class="org.seasar.dao.pager.PagerStatementFactory"/>
> 		</arg>
> <!--
> 		<arg>
> 			<component class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
> 		</arg>
> -->
> 		<arg>resultSetFactory</arg>
> 		<arg>annotationReaderFactory</arg>
> 	</component>

ここでDaoMetaDataFacotryImplのコンストラクタ・インジェクションで
PagerStatementFactoryを渡していますが、このあとにsetterインジェク
ションでDaoMetaDataFactoryImpl#setStatementFactoryが呼ばれています。

ここで、PagerStatementFactoryでなくConfigurableStatementFactory等が
DIされているのでないかと推察されます。

対策としては、PagerStatemmentFactoryがsetterでDIされるように、
現在コンストラクタ・インジェクションされている
・DataSource
・StatementFactory
・ResultSetFactory
・AnnotationReaderFactory
をsetterインジェクションされるように、dao.diconもしくはj2ee.diconを
修正するといいのではないかと思います。

> 
> 上記の問題が S2Daoのバージョン 1.0.41-RC1
> までは不具合が起きなかった(SqlExceptionにならなかった)
> のですが、1.0.41-RC1以降のバージョン
> 1.0.41〜1.0.49
> でまったく同じ現象が再発し、
> SqlExceptionが発生します。

1.0.41以降、StatementFactoryがsetterインジェクションされるように
なったためだと思います。

http://svn.seasar.org/browse?view=rev&root=s2dao&revision=821



-- 
Oonaka Hiroyuki <[E-MAIL ADDRESS DELETED]>


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