我的工作:
<bean class="com....JpaPagingItemReader">
<property name="queryString"
value="SELECT toto FROM MyToto toto WHERE toto.createDate > :calculDate"/>
<property name="parameterValues">
<map>
<entry key="calculDate" value-ref="calculDate" />
</map>
</property>
<property name="pageSize" value="${totoStep.pageSize}"/>
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<bean id="calculDate" factory-bean="dates" factory-method="getDate" scope="step">
<constructor-arg type="java.lang.String" value="totoStep"/>
</bean>
产生此错误:
java.lang.IllegalArgumentException:参数值[Sat Nov 01 00:00:00 CET 2014]不匹配类型[java.util.Date]
我有一个弹簧组件Dates
包含Map<String, Date>
我可以使用getDate(String)
方法访问。
当我记录参数时:
LOGGER.trace("query.setParameter({}:String, {}:{})", me.getKey(),
me.getValue(), me.getValue().getClass().getSimpleName());
显示:
JpaPagingItemReader:167 - query.setParameter(calculDate:String,Sat Nov 01 00:00:00 CET 2014:$ Proxy36)
请帮帮我。
答案 0 :(得分:0)
我找到了一个解决方案。但另一个是受欢迎的。 在我的情况下,没有必要在范围步骤。我可以:
<bean id="calculDate" factory-bean="dates" factory-method="getDate"
lazy-init="true">
<constructor-arg type="java.lang.String" value="totoStep"/>
</bean>
感谢此人知道如何在范围步骤中设置所有对象上的$ Proxy并强制我们使用接口(在这种情况下不可能)。
答案 1 :(得分:0)
您必须使用spring language expression来获取所需的值。
<bean class="com....JpaPagingItemReader">
<property name="queryString"
value="SELECT toto FROM MyToto toto WHERE toto.createDate > :calculDate"/>
<property name="parameterValues">
<map>
<entry key="calculDate" value="#{dates.date['totoStep']}" />
</map>
</property>
<property name="pageSize" value="${totoStep.pageSize}"/>
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>