以下查询返回一个列表,但我只对列表的最后一个元素感兴趣。
@Query("SELECT r FROM Reservation r WHERE r.reservationSeance.id=:seanceId AND r.seanceDate=:seanceDate")
public Reservation findReservationBySeanceDateAndSeanceId(@Param("seanceId") int seanceId, @Param("seanceDate") java.time.LocalDate seanceDate);
我应该如何重写SQL-Query才能实现我的想法?
答案 0 :(得分:1)
如果您将sampleFunc
用作数据库,则可以尝试以下操作:
mysql
答案 1 :(得分:1)
您需要为查询提供更多的参数,尤其是ORDER BY
子句。
要获取最新的seanceId
,您需要按该ID排序结果,但顺序相反。然后,仅告诉查询仅返回第一个结果:
SELECT r FROM Reservation r
WHERE r.reservationSeance.id=:seanceId
AND r.seanceDate=:seanceDate
ORDER BY seanceId
DESC LIMIT 1;
答案 2 :(得分:1)
一种可能的解决方案是使用ORDER BY r.id DESC
:
@Query("SELECT r FROM Reservation r " +
"WHERE r.reservationSeance.id=:seanceId AND r.seanceDate=:seanceDate " +
"ORDER BY r.id DESC")
public Reservation findReservationBySeanceDateAndSeanceId(
@Param("seanceId") int seanceId,
@Param("seanceDate") java.time.LocalDate seanceDate, Pageable pageable);
并且由于无法使用JPQL中的限制,因此可以使用Pageable
Pageable pageable = new PageRequest(0, 1);
Reservation reservation = r.findReservationBySeanceDateAndSeanceId(seanceId, seanceDate, pageable);
没有查询的另一种可能的解决方案:
public Reservation findTop1ByReservationSeanceAndSeanceDateOrderByIdDesc(
ReservationSeanceEntity reservationSenace,
java.time.LocalDate seanceDate
)
在第二种解决方案中,您必须传递ReservationSeance
对象而不是id
的{{1}},该查询可以读取为:
ReservationSeance