我有 4 個實體 MultiPlex、Screen、Screening 和 Movie。我想寫2個查詢。根據(jù)給定 MultiPlexId 的屏幕名稱查找屏幕是否存在。(假設(shè) id 1 的 Multiplex 有 4 個屏幕,Audi-1、Audi-2、Audi-3 和 Audi-4,查詢應(yīng)該能夠找到 id 1 的 Multiplex 中是否存在 Audi-2)查找在給定日期運行給定電影的所有多廳影院(放映有屏幕、電影和日期的參考)我的實體電影:-@Entitypublic class Movie { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String title; private double rating;}多重:-@Entitypublic class Multiplex { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String name; @OneToMany(mappedBy = "multiplex", cascade = CascadeType.ALL) private List<Screen> screens;}屏幕:-@Entitypublic class Screen { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String name; @ManyToOne private Multiplex multiplex;}篩選:-@Entitypublic class Screening { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @OneToOne private Screen screen; @OneToOne private Movie movie; private LocalDate date; private LocalTime time; private float pricePerSeat;}對于我嘗試的第一個查詢@Query("SELECT m FROM Multiplex m Where m.id = :mId and m.screens.name = :screenName") public Optional<Multiplex> findScreenByName(@Param("mId") long id, @Param("screenName") String name);
1 回答

慕娘9325324
TA貢獻1783條經(jīng)驗 獲得超4個贊
m.screens
不是一個Screen
字段,而是List<Screen>
. 所以表達m.screens.name:=screenName
是錯誤的。
嘗試這個
1)
@Query("select m from Multiplex m, Screen s where m.id=s.multiplex.id and m.id =:mId and s.name =:screenName") public Optional<Multiplex> findByMultiplexIdAndScreenName(@Param("mId") long id, @Param("screenName") String name);
2)
@Query("select distinct m from Multiplex m, Screening s where m.id=s.screen.multiplex.id and s.movie=:movie and s.date =:date") public List<Multiplex> findAllByMovieAndDate(@Param("movie") Movie movie, @Param("date") LocalDate date);
或者
@Query("select distinct s.screen.multiplex from Screening s where s.movie=:movie and s.date =:date") public List<Multiplex> findAllByMovieAndDate(@Param("movie") Movie movie, @Param("date") LocalDate date);
通過使用最后一個,如果決定將 FetchTypes 更改為 Lazy,您可能會遇到異常
添加回答
舉報
0/150
提交
取消