テーブル名を修正したらトリガーも修正しよう

原題:テーブル名を修正して@Table(name = "bar")の部分を書き換えてもupdate文のfrom句が書き換わらない

ぎゃー!トリガーにベタに書いてたテーブル名が古いままだったのが原因でした。
SQL Server Management Studioで実行したらトリガーの問題っていうのがコンソールに返ってきて、はじめて原因がわかった。死にたい。

結果としてのエラーコードはここで修正されているのと同じ。

https://www.seasar.org/issues/browse/DAO-46
http://d.hatena.ne.jp/arn/20061119#p2

seasar-userのMLは明日投げてみよう。

環境

jtds 1.2.2
s-2framework 2.4.30
s2-extension 2.4.30
s2-tiger 2.4.30
cubby 1.1.1

S2JDBCを利用

EclipseはPleiadesのEuropa 3.3.2.20080303版を使用して、WTP上からTomcat6で動かしている。
Tomcatのautomatic publishingを無効にするために、http://d.hatena.ne.jp/uriyuri/20080328/1206694040の通りに、標準出力フォルダを

{PROJECT}/src/main/webapp/WEB-INF/classes

に変更して、serverの自動公開のチェックを外した。

事象

  • select文は正常に望む結果が返ってくる
  • 試したなかでは、update文だとfrom句が書き変わってない
    • insert, deleteは未確認
  • HOT Deployどころか、確認用のWTPで動かしてるTomcat6をクリーンして再起動させても、プロジェクトをクリーンビルドしても解決しない
  • logSql()で出力されるSQLは期待するfrom句である、書き換え後のテーブル名になっている
  • jTdsがおかしいのかと思ってドライバをMS製のものに変えても、同様の例外が発生した

stacktrace

javax.servlet.ServletException: org.seasar.framework.exception.SQLRuntimeException: [ESSR0072]SQLで例外(SQL=[update sandbox.bar set hoge = ?, UPDATE_USER_ID = ? where ID = ?], Message=[[ESSR0072]SQLで例外(SQL=[update sandbox.bar set hoge = ?, UPDATE_USER_ID = ? where ID = ?], Message=[208], ErrorCode=S0002, SQLState={3})が発生しました : [SQLで例外(Message=[オブジェクト名 'sandbox.foo' は無効です。], ErrorCode=208, SQLState=S0002)が発生しました。], [SQLで例外(Message=[オブジェクト名 'sandbox.foo' は無効です。], ErrorCode=208, SQLState=S0002)が発生しました。], [オブジェクト名 'sandbox.foo' は無効です。], ErrorCode=208, SQLState=S0002)が発生しました
	org.seasar.cubby.filter.CubbyFilter.doFilter(CubbyFilter.java:105)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:75)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
	org.seasar.cubby.filter.RequestRoutingFilter.doFilter(RequestRoutingFilter.java:163)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:63)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
	org.seasar.cubby.filter.EncodingFilter.doFilter(EncodingFilter.java:179)


org.seasar.framework.exception.SQLRuntimeException: [ESSR0072]SQLで例外(SQL=[update sandbox.bar set hoge = ?, UPDATE_USER_ID = ? where ID = ?], Message=[[ESSR0072]SQLで例外(SQL=[update sandbox.bar set hoge = ?, UPDATE_USER_ID = ? where ID = ?], Message=[208], ErrorCode=S0002, SQLState={3})が発生しました : [SQLで例外(Message=[オブジェクト名 'sandbox.foo' は無効です。], ErrorCode=208, SQLState=S0002)が発生しました。], [SQLで例外(Message=[オブジェクト名 'sandbox.foo' は無効です。], ErrorCode=208, SQLState=S0002)が発生しました。], [オブジェクト名 'sandbox.foo' は無効です。], ErrorCode=208, SQLState=S0002)が発生しました
	org.seasar.framework.util.PreparedStatementUtil.executeUpdate(PreparedStatementUtil.java:68)
	org.seasar.extension.jdbc.query.AbstractAutoUpdate.executeInternal(AbstractAutoUpdate.java:123)
	org.seasar.extension.jdbc.query.AbstractAutoUpdate.execute(AbstractAutoUpdate.java:90)


org.seasar.framework.exception.SSQLException: [ESSR0072]SQLで例外(SQL=[update sandbox.bar set hoge = ?, UPDATE_USER_ID = ? where ID = ?], Message=[208], ErrorCode=S0002, SQLState={3})が発生しました
	org.seasar.extension.jdbc.impl.PreparedStatementWrapper.wrapException(PreparedStatementWrapper.java:72)
	org.seasar.extension.jdbc.impl.PreparedStatementWrapper.wrapException(PreparedStatementWrapper.java:67)
	org.seasar.extension.jdbc.impl.PreparedStatementWrapper.executeUpdate(PreparedStatementWrapper.java:91)
	org.seasar.framework.util.PreparedStatementUtil.executeUpdate(PreparedStatementUtil.java:66)
	org.seasar.extension.jdbc.query.AbstractAutoUpdate.executeInternal(AbstractAutoUpdate.java:123)
	org.seasar.extension.jdbc.query.AbstractAutoUpdate.execute(AbstractAutoUpdate.java:90)



java.sql.SQLException: オブジェクト名 'sandbox.foo' は無効です。
	at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368)
	at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2816)
	at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2254)
	at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:631)
	at net.sourceforge.jtds.jdbc.JtdsStatement.processResults(JtdsStatement.java:584)
	at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQL(JtdsStatement.java:546)
	at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeUpdate(JtdsPreparedStatement.java:505)
	at org.seasar.extension.jdbc.impl.PreparedStatementWrapper.executeUpdate(PreparedStatementWrapper.java:89)
	at org.seasar.framework.util.PreparedStatementUtil.executeUpdate(PreparedStatementUtil.java:66)
	at org.seasar.extension.jdbc.query.AbstractAutoUpdate.executeInternal(AbstractAutoUpdate.java:123)
	at org.seasar.extension.jdbc.query.AbstractAutoUpdate.execute(AbstractAutoUpdate.java:90)