[Seasar-user:3055] [S2DAO] selectListID というフィールド名
松山 大樹
t.matsuyama
2005年 12月 21日 (水) 13:36:35 JST
松山です。
S2DAO1.0.29 を使用していますが、ちょっと奇妙な現象が発生しています。
Postgres8.0.1 で、
-----------------------------------------
create table testdata (
selectListID serial Not Null,
keyID integer Not Null,
data text
);
Alter table testdata add Primary Key (selectListID);
-----------------------------------------
というテーブルを作り、それに対するDAO として、
public interface TestDataTableDao {
public static final Class BEAN = TestData.class;
public static final String getTestDataByPrimaryKey_QUERY = "selectListID = ? ";
public TestData getTestDataByPrimaryKey(int aID);
public static final String getTestDataByKeyID_QUERY = "keyID = ?";
public TestData getTestDataByKeyID(int aID);
}
public class TestData {
private int selectListID = 0;
private int keyID = 0;
private String data = "";
(getter/setterは省略)
}
を用意します。
すると、getTestDataByKeyID() メソッドは正常ですが、
getTestDataByPrimaryKey() メソッドの場合、
------------------------------------------------------------------------
DEBUG 2005-12-21 13:25:54,687 org.seasar.extension.dbcp.impl.ConnectionPoolImpl 物理的なコネクションを取得しました
DEBUG 2005-12-21 13:25:54,687 org.seasar.extension.dbcp.impl.DataSourceImpl 論理的なコネクションを取得しました
DEBUG 2005-12-21 13:25:54,796 org.seasar.extension.dbcp.impl.ConnectionWrapperImpl 論理的なコネクションを閉じました
DEBUG 2005-12-21 13:25:54,812 org.seasar.extension.jdbc.impl.BasicSelectHandler selectListID = 1
DEBUG 2005-12-21 13:25:54,812 org.seasar.extension.dbcp.impl.DataSourceImpl 論理的なコネクションを取得しました
DEBUG 2005-12-21 13:25:54,828 org.seasar.extension.dbcp.impl.ConnectionWrapperImpl 論理的なコネクションを閉じました
org.seasar.framework.exception.SQLRuntimeException: [ESSR0071]SQLで例外が発生しました。理由はjava.sql.SQLException: ERROR: syntax error at or near "selectListID"
at org.seasar.framework.util.PreparedStatementUtil.executeQuery(PreparedStatementUtil.java:37)
at org.seasar.extension.jdbc.impl.BasicResultSetFactory.createResultSet(BasicResultSetFactory.java:36)
at org.seasar.extension.jdbc.impl.BasicSelectHandler.createResultSet(BasicSelectHandler.java:175)
at org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:164)
at org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:137)
at org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:122)
at org.seasar.dao.impl.SelectDynamicCommand.execute(SelectDynamicCommand.java:40)
at org.seasar.dao.interceptors.S2DaoInterceptor.invoke(S2DaoInterceptor.java:36)
at test.daotest.TestDataTableDao$$EnhancedByS2AOP$$5dd582$$MethodInvocation$$getTestDataByPrimaryKey0.proceed(MethodInvocationClassGenerator.java)
at test.daotest.TestDataTableDao$$EnhancedByS2AOP$$5dd582.getTestDataByPrimaryKey(TestDataTableDao$$EnhancedByS2AOP$$5dd582.java)
at test.daotest.TestDao.main(TestDao.java:18)
Caused by: java.sql.SQLException: ERROR: syntax error at or near "selectListID"
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1482)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1267)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:186)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:392)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:330)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:240)
at org.seasar.framework.util.PreparedStatementUtil.executeQuery(PreparedStatementUtil.java:35)
... 10 more
DEBUG 2005-12-21 13:25:54,828 org.seasar.extension.dbcp.impl.ConnectionWrapperImpl 物理的なコネクションを閉じました
------------------------------------------------------------------------
というエラーになります。
selectListID というフィールドを、listID に変更し、関連するDaoとBean を修正すると、
正常に実行できます。
selectListID というフィールド名は、予約語か何かでしたか?
回避方法は、今のところ見つけていません。
--
::: 株式会社ワウワウ・コミュニケーションズ http://www.wowcom.co.jp/
::: ITシステム・インテグレートDiv.
::: Web・マーケティング&コマンドセンターUnit.
::: 松山 大樹 - t.matsuyama @ wowcom.co.jp
Seasar-user メーリングリストの案内