JPA 2, создать безопасный тип запроса кортежа с вложенной сущностью - PullRequest
0 голосов
/ 11 октября 2019

Мне нужно указать столбцы в моем запросе, поэтому я использовал createTupleQuery JPA метод. Это мой код:

final CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
final CriteriaQuery<Tuple> criteriaQuery = criteriaBuilder.createTupleQuery();
final Root<Customer> root = criteriaQuery.from(Customer.class);

final Predicate whereConditions = criteriaBuilder.or(
        criteriaBuilder.like(root.get(Customer_.email), email+'%'),
);

final TypedQuery<Tuple> queryData = entityManager.createQuery(
        getTuple(criteriaQuery, criteriaBuilder, root)
                .where(whereConditions)
                .orderBy(
                        criteriaBuilder.desc(root.get(Customer_.email))
                )
);

final List<Tuple> result = queryData.getResultList();

final List<Customer> output = result.stream().map(tuple2EntityFunc).collect(Collectors.toList());

private CriteriaQuery<Tuple> getTuple(CriteriaQuery<Tuple> criteriaQuery, CriteriaBuilder criteriaBuilder, Root<Cliente> root) {
    return criteriaQuery
            .select(criteriaBuilder.tuple(
                    root.get(Customer_.email).alias(Customer_.email.getName()),                 
                    )
            );
}

private Function<Tuple, Cliente> tuple2Entity = t -> {
    Customer output = new Customer();
    output.setEmail(t.get(Customer_.email.getName(), String.class));
    ...
    return output;
};

class Customer {
     String email;
     @OneToOne
     Address address; //nested entity
}

Я использую метамодель сущности для получения безопасного типа запроса.

Теперь мне нужно извлечь вложенную сущность Адрес из КлиентКласс , поэтому я попытался добавить свойство address как в метод tuple2Entity, так и в метод getTuple, однако это не сработало.

Есть ли какие-либо изменения для получения вложенного объекта с помощью createTupleQuery?

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