[Seasar-user:1115] S2Daoのパラメータバインドルールについて

Taro Kato kato
2004年 10月 13日 (水) 17:25:22 JST


比嘉さん、こんにちわ。グルージェント加藤です。

S2Dao1.0.12(公開されているそのままのものです)で、
アンダースコア付きの項目を、プロパティ名でSQLのパラメータに
バインドしようとすると次の例外が発生します。

org.seasar.extension.jdbc.ColumnNotFoundRuntimeException:
[ESSR0068]テーブル(system.UPDATE_PAGES_TABLE)のカラム(updateId)が見つかりません
	at org.seasar.dao.impl.BeanMetaDataImpl.convertFullColumnName(BeanMetaDataImpl.java:182)
	at org.seasar.dao.impl.DaoMetaDataImpl.createAutoSelectSql(DaoMetaDataImpl.java:317)

対象となるビーンには、COLUMNアノテーションで定義してあります。
プロパティ名はアンダースコアのない、「updateId」としています。
------------こんな感じです。--------------
public class BaseUpdatePagesTable implements Serializable {
	static public final String TABLE = "system.UPDATE_PAGES_TABLE";
	static public final String updateId_COLUMN = "UPDATE_ID";
	:
------------------------------------------

メソッドの _ARGS には、"updateId" としています。これがなぜか
パラメータバインドというよりも、項目名として検証されているようです。
対象となるSQL文の方は、以下のようになっています。

   where UPDATE_PAGES_TABLE.UPDATE_ID = /*updateId*/'dummy'

メソッドは、以下のようにしています。

	static public final String  getUpdatePageTables_ARGS = "updateId";
	public BaseUpdatePagesTable[]  getUpdatePageTables(String updateId);

トレースすると、アーギュメントを convertFullColumnName しているようですが
ARGSに指定する名称は、項目名を使わなければならないのでしょうか?
でもそうするとJOINした他のテーブルの項目名などの扱いも出てきて分からなくなります。

それと、最初は、ビーンを渡して、/*updateTable.updateId*/ というパラメータ
バインドがしたかったのですが、それも、updateTableというカラム名が無いと
怒られます。

私の仕様の理解が足りないのかも知れませんが、
少し解説していただけるとうれしいです。



[[[[[[[[[[[[[[[[[[[[[[ G l u e g e n t , I n c .
[[[[[[[[[[     [[[[[[[
[[[[[[      [[[[[[[[[[
[[[[      [[[[[[[[[[[[    http://www.gluegent.com/
[[      [[[[[[    [[[[
[[[         [[[[   [[[ System Development Division
[[[[[[[[[[[[[[   [[[[[
[[[[[[[[[[[[   [[[[[[[    T a r o  K a t o
[[[[[[[[[[  [[[[[[[[[[




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