QueryDSL从实体字段获取价值

时间:2018-08-23 22:16:32

标签: java hibernate jpa querydsl

我对以下代码有疑问:

@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,这是不正确的。无需搜索“名称”即可完美地进行查询。进入“电影”中实体领域(“工作室”)的领域是否麻烦?有人解决过这个问题吗?

0 个答案:

没有答案