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