首页 > 解决方案 > 搜索具有外键的 JPA 实体的约定是什么?

问题描述

我正在开发一个电影院 API,以提供电影票预订服务所需的后端功能(为特定电影的特定放映预留座位等)。

我有一个座位实体定义如下:

@Entity
@Data
public class Seat {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;


    private String seatRow;

    private Integer seatNumber;

    @ManyToOne
    private Auditorium auditorium;

    @ManyToMany(mappedBy = "seat")
    private Set<Reservation> reservation;

}

我希望能够通过 id、seatRow、seatNumber 和 Audience 在数据库中搜索座位。我想知道是否有搜索具有外键的 JPA 实体的约定(在我的情况下是 Auditorium)。我应该像示例 1 那样通过比较 id、seatRow、seatNumber 和 Auditorium,还是像示例 2 那样比较 id、seatRow、seatNumber 和 Auditorium 来搜索 Seat?

示例 1:

@Query("SELECT s FROM Seat s WHERE (:id is null or s.id = :id) and " +
        "(:seatRow is null or s.seatRow = :seatRow) and " +
        "(:seatNumber is null or s.seatNumber = :seatNumber) and" +
        "(:auditorium is null or s.auditorium = :auditorium)")
ArrayList<Seat> searchSeats(Integer id, String seatRow, Integer seatNumber, Auditorium auditorium);

示例 2:

@Query("SELECT s FROM Seat s WHERE (:id is null or s.id = :id) and " +
        "(:seatRow is null or s.seatRow = :seatRow) and " +
        "(:seatNumber is null or s.seatNumber = :seatNumber) and" +
        "(:auditorium is null or s.auditorium.id = :auditoriumId)")
ArrayList<Seat> searchSeats(Integer id, String seatRow, Integer seatNumber, Integer auditoriumId);

我的 GET 搜索映射将使用 auditiumId 作为参数,因为我认为这对用户来说最简单,但我不确定我的存储库查询是否应该尝试最好地匹配我正在搜索的实体的结构。

标签: javamysqlspring-bootjparelational-database

解决方案


推荐阅读