jpa 2, используйте тип sage query и избегайте запросов к вложенным объектам - PullRequest
0 голосов
/ 03 октября 2019

Я использую 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 ... в любом случае это звучит странно

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