Я использую JPA 2.2 с реализацией Hibernate 5.2.
У меня есть следующая сущность:
public class Order implements Serializable {
private String customer;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn((name = "ID", referencedColumnName = "ID_ORDER")
private Shipping shipping;
... get and set
}
Теперь я хочу запросить ТОЛЬКО поля заказа (без свойств сущности-объекта) водин выбор.
Это мой код:
final CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
final CriteriaQuery<Order> criteria = criteriaBuilder.createQuery( Order.class );
final Root<Order> orderRoot = criteria.from( Order.class );
criteria.where( criteriaBuilder.equal( orderRoot.get( Order_.customer ), customer ) );
criteria.orderBy(criteriaBuilder.desc(orderRoot.get(Order_.dt)));
final List<Order> output = entityManager.createQuery( criteria ).getResultList();
return output;
Установив hibernate show_sql = true, в моем модульном тесте я обнаружил, что для каждого результата есть выбор для доставка свойство объекта. Что-то вроде:
select order0_.id, order0_.customer from Order ..
select ordershipping0_.id, ordershipping0_.email from Shipping ...
select ordershipping0_.id, ordershipping0_.email from Shipping ...
select ordershipping0_.id, ordershipping0_.email from Shipping ...
select ordershipping0_.id, ordershipping0_.email from Shipping ...
Как мне этого избежать?
Было бы еще лучше выбрать конкретные столбцы для Order, хотя я хочу всегда возвращать Order class
PS , который я хочу использоватьСобственный код JPA, если возможно, никакой реализации, специфичной для Hibernate
EDIT Я заметил, что сущности автоматически выбираются, если nestedProperty имеет столбец referencedColumn to parent.pk ... в любом случае это звучит странно