JPA: таблицы LEFT JOIN FETCH на нескольких столбцах - PullRequest
0 голосов
/ 18 января 2019

Я хочу использовать JPA CriteriaBuilder для LETT JOIN FETCH для нескольких столбцов таблицы.

У меня есть две сущности с разными составными ключами:

@Embeddable
public class CarKey {

    private String CarType;

    private String CarId;

}

@Entity(name = "cars")
public class Car {

    @EmbeddedId
    private CarKey key;

    // car information

    @OneToMany
    private Set<Part> parts;

}

@Entity (name = "parts")
public class Part {

    @EmbeddedId
    private PartKey key;

    private String CarType;

    private String CarId;

    // part information

}

Эквивалент HQL должен выглядеть примерно так:

SELECT c
FROM cars c
LEFT JOIN FETCH parts p
ON c.key.CarType = p.CarType
    AND c.key.CarId = p.CarId

My CriteriaQuery выглядит так:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();

CriteriaQuery<Car> carQuery = cb.createQuery(Car.class).distinct(true);
Root<Car> carRoot = carQuery.from(Car.class);

carQuery.select(carRoot);
carRoot.fetch("parts", JoinType.LEFT);

Как мне указать столбцы JOIN? Они состоят из составного ключа. Я попытался привести Fetch к Join и применить .on (...), что не сработало, так как «с предложениями не допускаются в fetch join». Определение совпадений в предложении WHERE не работает для LEFT JOIN.

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