0

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>

何か案が?

4

0 に答える 0