Мне нужно выполнить JOIN FETCH в JPA Criteria с использованием статической метамодели, однако я не знаю, как это сделать без предупреждения о непроверенной исключительной ситуации.
Предположим, у нас есть объект Thing свнутри него лениво-инициализированная другая сущность.Я хочу получить вещи с извлеченными другими, где other.someField = "someValue".Примерно так я бы это и сделал:
public List<Thing> getThings() {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Thing> cq = cb.createQuery(Thing.class);
Root root = cq.from(Thing.class);
// This gives an unchecked cast warning:
Join<Thing, Other> other = (Join<Thing, Other>) root.fetch(Thing_.other);
cq.select(root).where(cb.equal(other.get(Other_.someField), "someValue"));
return em.createQuery(cq).getResultList();
}
Однако, поскольку интерфейсы Join и Fetch не имеют ничего общего, я получаю предупреждение «unchecked cast».Я хотел бы избавиться от этого предупреждения (без использования @SuppressWarnings).
Полагаю, я мог бы сделать это следующим образом:
cb.equal(root.get(This_.THING).get(Other_.SOMEFIELD), "someValue"))
Но я сомневаюсь, что лучше, видяздесь я работаю со строками (так что безопасность типов отсутствует).
Какой более чистый способ достижения вышеуказанного?