1
 @Query(
      nativeQuery = true,
      value =
          "SELECT td.trip_date, td.trip_code, td.trip_distance, td.trip_travel_time, tu.status, tu.pickup_drop_time, u.id, u.user_name\n"
              + "FROM trip_details td  JOIN trip_users tu ON tu.trip_details_trip_id=td.trip_id \n"
              + "JOIN users u ON u.id=tu.trip_user_id \n"
              + "WHERE td.trip_date BETWEEN :fromDate AND :toDate \n"
              + "AND u.id =: userId")
  List<Object> getMobileForUpComingTripDetails(
      @Param("userId") Integer userId,
      @Param("fromDate") Date fromDate,
      @Param("toDate") Date toDate);

IT 会报错

Caused by: java.lang.IllegalStateException: Using named parameters for method public abstract java.util.List com.dao.interfaces.TripDetailsDao.
getMobileForUpComingTripDetails(java.lang.Integer,java.util.Date,java.util.Date) but parameter 'userId' not found in annotated query 'SELECT td.trip_date, td.trip_code, td.trip_distance, td.trip_travel_time, tu.status, tu.pickup_drop_time, u.id, u.user_name
FROM trip_details td  JOIN trip_users tu ON tu.trip_details_trip_id=td.trip_id 
JOIN users u ON u.id=tu.trip_user_id 
WHERE td.trip_date BETWEEN :fromDate AND :toDate 
AND tu.trip_user_id = : userId'!

但是当我们使用单个 where 子句时,它的工作原理

 @Query(
      nativeQuery = true,
      value =
          "SELECT td.trip_date, td.trip_code, td.trip_distance, td.trip_travel_time, tu.status, tu.pickup_drop_time, u.id, u.user_name\n"
              + "FROM trip_details td  JOIN trip_users tu ON tu.trip_details_trip_id=td.trip_id \n"
              + "JOIN users u ON u.id=tu.trip_user_id \n"
              + "WHERE td.trip_date BETWEEN :fromDate AND :toDate")
  List<Object> getMobileForUpComingTripDetails(
     // @Param("userId") Integer userId,
      @Param("fromDate") Date fromDate,
      @Param("toDate") Date toDate);

我的回应是

[
   {
        "tripDate": "15/02/2022",
        "tripCode": "2sdfsdfklsfj0001",
        "userName": "jkl.com",
        "userId": 204
    },
    {
        "tripDate": "15/02/2022",
        "tripCode": "220xsdjffksf0001",
        "userName": "abc.com",
        "userId": 210
    },
]

但是我的问题是基于 queryParm 作为 userId 我们获取的数据不是全部,所以我添加了多个 where claues 我们得到错误请帮助我。

4

1 回答 1

3

因此,当您查看错误消息时,它显然表示userId在查询中找不到该参数。这是因为您在查询中的拼写错误:

+ "AND u.id =: userId")

它应该是这样的:

+ "AND u.id = :userId")

阅读错误消息始终可以帮助您进行调试。

于 2022-02-18T15:10:19.577 回答