ExpressionEvaluatingSqlParameterSourceFactory中的静态方法参数的正确语法

时间:2018-04-11 17:47:55

标签: spring-integration

当作为参数传递给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)

你们其中一个人能帮我正确咒语吗?

干杯,你们。

1 个答案:

答案 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()" 运营商之前没有井号。