在这种情况下,将'$ Proxy0类型的属性值转换为所需类型的失败意味着什么?

时间:2013-06-10 13:29:12

标签: spring spring-batch

我正面临以下错误消息:

  

创建名为'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的属性值有关?

1 个答案:

答案 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?你能解释一下你想要在更高层次上实现的目标吗?