Я хочу использовать 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.