java - 搜索具有外键的 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 作为参数,因为我认为这对用户来说最简单,但我不确定我的存储库查询是否应该尝试最好地匹配我正在搜索的实体的结构。
解决方案
推荐阅读
- c++ - 如何让两段代码同时运行
- selenium - 无法解析主机:硒
- java - 泽西还没有准备好
- c# - 通过 resharper 进入 nuget-package 代码 c#
- javascript - 使用 Javascript 删除添加的列表项
- c# - C#我遍历一个任务队列并获得空值,为什么会这样?
- ionic-framework - 如何检查 ionic 3 模板中的文件扩展名
- android-studio - 如果 Android Studio 在控制面板中不可见并且卸载程序不在文件位置,如何卸载它
- ruby-on-rails - nil:NilClass 的未定义方法“bytesize”
- c# - 剃须刀组件的源生成器不工作