自定义查询中的仅最后一条记录

时间:2018-08-25 14:44:01

标签: java sql spring spring-data-jpa

以下查询返回一个列表,但我只对列表的最后一个元素感兴趣。

@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才能实现我的想法?

3 个答案:

答案 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