我正面临以下错误消息:
创建名为'jdbcWriter'的bean时出错,bean初始化失败,无法将类型'$ Proxy0的属性值转换为属性'itemPreparedStatementSetter'的必需类型。
这是我的代码:
<beans:bean id="jdbcWriter"
class="org.springframework.batch.item.database.JdbcBatchItemWriter">
<beans:property name="dataSource" ref="dataSource"/>
<beans:property name="sql" value="update Trans_Tst set (amount) values (?)
where id= ?"/>
<beans:property name="itemPreparedStatementSetter"
ref="WriterSqlParameterSetter"/>
</beans:bean>
<beans:bean id="WriterSqlParameterSetter"
class="sa.com.anb.itg.dev.settlement.batch.WriterSqlParameterSetter" scope="step">
<beans:property name="amount" value="#{jobParameters[amount]}"/>
<beans:property name="id" value="#{jobParameters[id]}"/>
</beans:bean>
public class WriterSqlParameterSetter implements
ItemPreparedStatementSetter<transactionas>{
public void setValues(transactionas ts, PreparedStatement ps) throws SQLException {
ps.setDouble(1, ts.GetAmount());
ps.setInt(2, ts.GetID());
}
}
任何人都可以帮我解决这个错误吗?此错误是否与WriterSqlParameterSetter
的属性值有关?
答案 0 :(得分:1)
好的,我在这里看到的第一件事是:
WriterSqlParameterSetter是一个ItemPreparedStatementSetter!细!
但即使你宣布:
<beans:property name="amount" value="#{jobParameters[amount]}"/>
<beans:property name="id" value="#{jobParameters[id]}"/>
我没有看到这些属性:
public class WriterSqlParameterSetter implements
ItemPreparedStatementSetter<transactionas>{
public void setValues(transactionas ts, PreparedStatement ps) throws SQLException {
ps.setDouble(1, ts.GetAmount());
ps.setInt(2, ts.GetID());
}
}
即使声明了属性,ItemPreparedStatementSetter也不会使用它们,因为它从作者收到的对象中获取值(例如,transactionas)。
我试图了解为什么你需要在jobParameters中传递金额和ID?你能解释一下你想要在更高层次上实现的目标吗?