我在Spring批处理代码中遇到了一个错误:创建名为“itemReader”(在类路径资源中定义)的bean时出错,未能将“$Proxy0”类型的属性值转换为属性“preparedStatementSetter”所需的类型。
这是我的ItemReader代码:
<beans:bean id="itemReader"
class="org.springframework.batch.item.database.JdbcCursorItemReader">
<beans:property name="dataSource" ref="dataSource"/>
<beans:property name="sql" value="select * from Trans_Tst WHERE id =?"/>
<beans:property name="rowMapper" ref="romMapper"/>
<beans:property name="preparedStatementSetter" ref="ReaderSqlParameterSetter"/>
</beans:bean>
<beans:bean id="ReaderSqlParameterSetter"
class="sa.com.anb.itg.dev.settlement.batch.ReaderSqlParameterSetter" scope="step">
<beans:property name="id" value="#{jobParameters[id]}"/>
</beans:bean>
这是我的ReaderSqlParameterSetter类:
package sa.com.anb.itg.dev.settlement.batch;
import java.sql.PreparedStatement;
import org.springframework.batch.item.database.ItemPreparedStatementSetter;
import java.sql.SQLException;
public class ReaderSqlParameterSetter implements
ItemPreparedStatementSetter<transactionas>{
public void setValues(transactionas transactionas,PreparedStatement ps)
throws SQLException {
ps.setInt(1, transactionas.GetID());
}
}
<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="preparedStatementSetter"
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 PreparedStatementSetter {
transactionas transactionas = new transactionas();
public void setValues(PreparedStatement ps) throws SQLException {
ps.setDouble(1, transactionas.GetAmount());
ps.setInt(2, transactionas.GetID());
}
}
谁能帮帮我吗?
你没有使用正确的界面。ReaderSqlParameterSetter应该实现PreparedStatementSetter而不是ItemPreparedStatementSetter
如果您查看JdbcCursorItemReader的impl:
public class JdbcCursorItemReader<T> extends AbstractCursorItemReader<T> {
PreparedStatement preparedStatement;
PreparedStatementSetter preparedStatementSetter;
String sql;
RowMapper rowMapper;
该属性是PreparedStatementSetter。
如果您查看您尝试使用的界面:
public interface ItemPreparedStatementSetter<T> {
/**
* Set parameter values on the given PreparedStatement as determined from
* the provided item.
* @param ps the PreparedStatement to invoke setter methods on
* @throws SQLException if a SQLException is encountered (i.e. there is no
* need to catch SQLException)
*/
void setValues(T item, PreparedStatement ps) throws SQLException;
}
此接口不扩展PreparedStatementSetter。。。
所以它不起作用。如果你没有把范围=步骤,你可能会有一个ClassCastException类型的错误!
这是我的代码: 有人能帮我解决这个错误吗?此错误是否与的属性值有关?
我有两个实体,它们使用一个主键互相引用,主键是一个实体的整数。我不确定我做这件事的方式是否正确。 下面是引用主键id为int的实体 下面是我们从上面的实体中将外键设置为Kmichango kandaMchango的实体。 这里是表单的一部分,我在这里提交了用户在jumuiya_michango_form.html中提供的数据 下面是我的控制器中用于链接到表单和发布数据的两个方法 在我提交表单后,我
org.springframework.beans.ConversionNotSupportedException:未能将类型“java.lang.long”的属性值转换为属性“card”所需的类型“card”;嵌套异常是java.lang.IllegalStateException:无法将类型“java.lang.Long”的值转换为属性“Card”所需的类型“Card”:找不到匹配的编辑器或转
我想在json中以的形式发布上面的字符串日期,但我收到了400个错误请求。有人能帮忙吗。我使用过,但它也没有帮助我。
我正在关注Spring in Action 5,在按下提交按钮后创建Taco模型时遇到问题。这是我的设计Taco控制器类: 以及我捕获的错误消息: 炸玉米饼实体如下所示: 以及我的配料实体: 这是一个html页面,必须使用所选成分创建新的Taco对象: 我该怎么修理它?谢谢你的预付款。
我是Spring MVC的新手,试图构建一个示例应用程序,我试图将数据保存到一个名为EmployeeDetails的表中,该表与表用户有一对一的关系。提交表单后,我在字段“user”的对象“employee details”中得到了这个错误字段:rejected value[Users];代码[typemismatch.employeeDetails.user,typemismatch.user,