Querydsl InnerJoin DTO

时间:2018-08-22 12:57:50

标签: java spring hibernate jpql querydsl

我有类似的东西(myFavouriteBook和book均来自querydsl QClasses):

JPAQuery<MyFavouriteBookDto> query = new JPAQuery<>(entityManager);

return query.select(Projections.bean(MyFavouriteBookDto.class,
            myFavouriteBook.customizationId,
            myFavouriteBook.position))
            .from(myFavouriteBook)
            .innerJoin(myFavouriteBook.book, book)
            .where(book.bookId.eq(myFavouriteBook.book.bookId))
            .fetch();

我不想从两个类都获取所有字段,所以我使用dtos。但是我该如何使用dto书而不是实体书? 我尝试添加

            myFavouriteBook.book

之间

     myFavouriteBook.customizationId,
     myFavouriteBook.position 

,但是存在一个错误,即实体和dto不兼容。我也尝试过内部Projections.bean,但是它不起作用。

1 个答案:

答案 0 :(得分:0)

您需要将MyFavouriteBookDto的拟合构造函数注释为@QueryProjection。这将生成QMyFavouriteBookDto。 然后,您需要像select这样在new QMyFavouriteBookDto(myFavouriteBook.customizationId, myFavouriteBook.position)中使用生成的类 那应该可以解决问题。