Как сделать выборочный запрос по критериям ИЗБЕГАЙТЕ использование конструктора классов DTO - PullRequest
0 голосов
/ 14 апреля 2020

Есть ли другой способ использовать запрос выбора без параметризованного конструктора.

Например:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<BookWithAuthorNames> cq = cb
        .createQuery(BookWithAuthorNames.class);
// Define FROM clause
Root<Book> root = cq.from(Book.class);
Join<Book, Author> author = root.join(Book_.author);

// Define DTO projection
cq.select(cb.construct(
        BookWithAuthorNames.class,
        root.get(Book_.id),
        root.get(Book_.title),
        root.get(Book_.price),
        cb.concat(author.get(Author_.firstName), ' ',
                author.get(Author_.lastName))));

здесь root .get () принимает / отображает значение из конструктора класса DTO. Поскольку я удалил конструктор, я получаю ошибку

Unable to locate appropriate constructor on class

Как я могу изменить свой запрос на выборку, чтобы я мог использовать запрос на выборку без конструктора DTO.

Я не хочу оставлять конструктор, поскольку у него более 15 параметров, это вызывает проблемы с сонаром. Я хочу провести рефакторинг, но не могу найти никакого решения, для которого я могу использовать что-то еще вместо конструктора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...