我对以下代码有疑问:
@Test
public void shouldFindFilmsWithGreatestDurationFromGivenNameStudio () throws
ParseException {
// given
Studio defaultStudio = saveDefaultStudio();
List<Film> films = saveDefaultFilmList();
defaultStudio.addFilm(films.get(0));
defaultStudio.addFilm(films.get(1));
// when
JPAQueryFactory queryFactory = new JPAQueryFactory(this.entityManager);
QFilm film = QFilm.film;
QFilm f = new QFilm("f");
QStudio studio = new QStudio("studio");
List<Film> filmList = queryFactory.selectFrom(film)
.where(film.duration.eq(
JPAExpressions.select(f.duration.max()).from(f)).and(film.studio.name.eq(defaultStudio.getName())))
.fetch();
我想得到的是由制片厂生产并给出名字的最长的电影(duration.max())。我已经坚持了工作室和电影。
以下是必要代码的一部分: 工作室
@Entity
@Table(name = "studios")
public class Studio extends AbstractEntity {
@Column(name = "studio_name")
private String name;
和电影:
@Entity
@Table (name = "films")
public class Film {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "studio_id")
private Studio studio;
我确信这种关系能奏效。问题是我得到了大小为0的filmList,这是不正确的。无需搜索“名称”即可完美地进行查询。进入“电影”中实体领域(“工作室”)的领域是否麻烦?有人解决过这个问题吗?