Внутреннее соединение JPA ManyToOne при выборе с одной стороны - PullRequest
0 голосов
/ 06 октября 2018

Я использую метод CriteriaBuilder.У меня есть несколько таблиц, связанных друг с другом.У меня есть 3 таблицы с именами A, B и C.Предположим, что в таблице B есть внешний ключ из таблицы *1005*, а в таблице C есть еще один внешний ключ из таблицы B.Итак, у меня есть запрос, подобный следующему:

        CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();
        CriteriaQuery<ResultObject> query = criteriaBuilder.createQuery(ResultObject.class);
        Root<A> rootA = query.from(A.class);
        Join<A, B> joinB = root.join(A_.bId , JoinType.INNER);
        Root<C> rootC = query.from(C.class);
        query.where(criteriaBuilder.equal(joinB.get(B_.field) , rootC.get(C_.bId)));

Это выполняет работу, но создает запрос перекрестного соединения между B и C. Как я могу преобразовать его во внутреннее соединение?

Обновление:

вот мой hql, который работает нормально.Мне нужен эквивалент criteria builder один:

select
    new com.shaheri.financial.ReportParam(function('TRUNC',
    contract.creationDate),
    min(price.currencyCode),
    count(price.id),
    sum(price.totalPrice),
    sum(price.userRound),
    sum(price.userMarkup),
    sum(price.userDiscount),
    sum(price.userCommission),
    sum(price.tax),
    sum(price.surcharge),
    sum(price.basePrice),
    sum(price.agencyRound),
    sum(price.agencyMarkup),
    sum(price.agencyDiscount),
    sum(price.agencyCommission)) 
from
    Price as price  
inner join
    price.proforma as proforma 
inner join
    proforma.contract as contract 
inner join
    Voucher as voucher 
        on voucher.contract = contract 
inner join
    ServiceVoucher as serviceVoucher 
        on serviceVoucher.contract = contract 
inner join
    FlightVoucher as flightVoucher 
        on flightVoucher.contract = contract  
where
    (
        contract.creationDate>=:param0     
    )     
    and (
        contract.creationDate<=:param1     
    )     
    and (
        price.originPrice is not null     
    )     
    and (
        (
            flightVoucher.agencySupplier in (
                36L             
            )         
        )         
        or (
            voucher.agencySupplier in (
                36L             
            )         
        )         
        or (
            serviceVoucher.agencySupplier in (
                36L             
            )         
        )     
    )     
    and (
        contract.user=4L     
    ) 
group by
    function('TRUNC',
    contract.creationDate)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...