spring-jdbcを使用してOracleでrowidごとに行を更新する際に奇妙な問題が発生します。
問題は、すべてが正常であるということですが、一部のROWIDについては、更新が行われず、アプリケーションがフリーズします。春のログレベルをDEBUGに変更して、何が起こっているかを確認しましたが、何も奇妙なことはなく、春のログは更新が成功したのとまったく同じです。
plsqlで同じSQLを実行しようとしましたが、更新は正常に実行されました。
春のバージョンは3.1.1です。リリースOracleのバージョンは11.1.0.6.0です。
daoの更新メソッドの本体は次のとおりです。
String sql =
"UPDATE" + schema+"。MSGmSET m.STATE =" + state + "WHERE ROWID ='" + msg.getRowId()+ "'";
getJdbcTemplate()。update(sql);
dao bean:
<bean id="messageDao" class="com.foo.dao.springjdbc.MessageDaoSpringJdbcImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
jdbcTemplate:
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
情報源:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@${db.ip}:${db.port}:${db.sid}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
<property name="validationQuery" value="select 1 from dual"/>
<property name="testOnBorrow" value="true"/>
<property name="testWhileIdle" value="true"/>
<property name="timeBetweenEvictionRunsMillis" value="5000"/>
<property name="numTestsPerEvictionRun" value="3"/>
<property name="maxActive" value="1"/>
<property name="maxIdle" value="3"/>
</bean>
何か案が?