HQL для пользовательского класса с сущностью, выбирая только id, затем запрашивая n + 1 - PullRequest
2 голосов
/ 02 марта 2020

Я использую HQL Query и пытаюсь передать объект сущности в пользовательский класс (представление), он просто выбирает мой идентификатор сущности, а затем всю сущность, делая запрос N + 1, это не так хорошо .

Стек: Spring Boot v2.2.5.RELEASE

Это ошибка Hibernate? Кто-нибудь знает способ решить эту проблему? Я пытаюсь не отображать каждый столбец объекта в моем пользовательском классе. Следуйте приведенным ниже примерам:

@Data
@Entity
@EqualsAndHashCode(callSuper = true)
public class Book extends MyModel {

    @Column(name = "title")
    private String title;

    @Column(name = "some_column_fetch")
    private String someColumnFetch;

    @ManyToOne(cascade = CascadeType.ALL)
    private Author author;

}
@Data
@Entity
@EqualsAndHashCode(callSuper = true)
public class Magazine extends MyModel {

    @Column(name = "title")
    private String title;

    @Column(name = "some_column_fetch")
    private String someColumnFetch;

    @ManyToOne(cascade = CascadeType.ALL)
    private Author author;

}

@Data
public class BookView {

    private final Book book;

    private final Magazine magazine;

}
public interface BookRepository extends JpaRepository<Book, UUID> {

    @Query("SELECT new com.example.demo.views.BookView(book, magazine) " +
            " FROM Book book" +
            " LEFT JOIN Magazine magazine ON book.someColumnFetch = magazine.someColumnFetch")
    List<BookView> findViews();

}
...