Мне нужно указать столбцы в моем запросе, поэтому я использовал 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?