当作为参数传递给ExpressionEvaluatingSqlParameterSourceFactory时,用于引用静态函数调用的字符串表达式的正确语法是什么?
作为示例,我有一个静态函数,它在实用程序类中返回java.util.Date:
public class DateTimeUtils {
private DateTimeUtils() {throw new IllegalStateException("Utility class");}
public static Date currentDeliveryDate() {
ZonedDateTime today = ZonedDateTime.now(ZoneOffset.UTC);
return new DateTime(
today.getYear(),
today.getMonthValue(),
today.getDayOfMonth(),
5,
0,
0)
.toDate();
}
我想将该函数的结果用作SQL参数。 SQL与
一致select zip
from delivery_status
where delivery_date = :deliverydate
设置参数有点像这样:
public SqlParameterSourceFactory sourceFactory() {
ExpressionEvaluatingSqlParameterSourceFactory sourceFactory =
new ExpressionEvaluatingSqlParameterSourceFactory();
Map<String, String> params = new HashMap<>();
params.put("deliverydate", "#T(com.acme.util.DateTimeUtils).currentDeliveryDate()");
sourceFactory.setParameterExpressions(params);
return sourceFactory;
}
我尝试过使用/不使用T,井号,括号和完全限定名称的变体,但我一直在
org.springframework.dao.InvalidDataAccessApiUsageException: No value supplied for the SQL parameter 'deliverydate': No value registered for key 'deliverydate'
at org.springframework.jdbc.core.namedparam.NamedParameterUtils.buildValueArray(NamedParameterUtils.java:355)
你们其中一个人能帮我正确咒语吗?
干杯,你们。
答案 0 :(得分:2)
必须像这样工作:
UPDATE CM_WCRoll t
SET t.SumOfHrs = DLookUp("SumOfHrs", "CM_qryLabor6_parentunion_sum_PROD",
"PartID = " & t.PartID & " AND WC_ID = " & t.WC_ID)
WHERE t.PartID IN
(SELECT PartID FROM PM_qryBOM_LvlX_nochild);
"T(com.acme.util.DateTimeUtils).currentDeliveryDate()"
运营商之前没有井号。