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