【问题标题】:JpaRepository findBy field from referenced table引用表中的 JpaRepository findBy 字段
【发布时间】:2018-12-17 03:47:37
【问题描述】:
@Entity
@Table(name="seance")
@Data
public class Seance {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(nullable = false, unique = true)
    private Integer id;

    private java.time.LocalTime displayTime;

    @ManyToMany(mappedBy = "seances")
    @JsonIgnore
    private List<Repertoire> repertoires = new ArrayList<>();

    @OneToMany(mappedBy = "reservationSeance", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JsonIgnore
    private List<Reservation> reservations = new ArrayList<>();

}


@Entity
@Table(name="reservation")
@Data
public class Reservation {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(nullable = false, unique = true)
    private Integer id;

    private java.time.LocalDate reservationDate;

    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "id_seance")
    private Seance reservationSeance;

   .........

}

我有两个与 ManyToOne 相关的实体,我尝试扩展 JpaRepository

public interface ReservationRepository extends JpaRepository<Reservation,Integer> {
    List<Reservation> findReservationsByReservationSeance(Seance seance);
}

但是作为参数,我必须使用所有的 Object Seance,可以使用 JpaRepository 仅通过 Seance Table 中的 id 和 displayTime 查找预订,还是需要编写自己的方法?

【问题讨论】:

  • 你试过...ByReservationSeanceIdAndReservationSeanceDisplayTime(Long, LocalTime)吗?
  • 如果需要具体的请求,可以扩展,或者使用派生请求;这只是一个选择。
  • @crizzis ...ByReservationSeanceIdAndReservationSeanceDisplayTime(Long, LocalTime) 如果我可以使用这些字段,Intellij 不会将它们显示为提示?

标签: java spring-boot spring-data-jpa jpql


【解决方案1】:

您可以在ReservationRepository 中添加自己的查询

@Query("SELECT r FROM Reservation r WHERE r.reservationSeance.id=:seanceId AND r.reservationSeance.displayTime = :displayTime")
public List<Reservation> findReservations(@Param("seanceId") int seanceId, @Param("displayTime") LocalTime displayTime);

【讨论】:

  • 为什么 r.reservationSeance.displayTime > :displayTime 不相等?
  • 我不知道你到底想做什么 - 随你喜欢 :) 无论如何你都可以使用 = &gt; &lt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 2021-04-24
  • 2018-05-11
  • 2018-06-07
  • 2016-09-28
  • 1970-01-01
相关资源
最近更新 更多