Why is it necessary sometimes to cast?
Join<X, Y> a = (Join) Fetch<X, Y> ...
For Example:
Root<Person> personRoot = criteriaQuery.from(Person.class);
@SuppressWarnings("unchecked")
Join<Person, Loan> loanJoin = (Join) personRoot.fetch("loan", JoinType.INNER);
loanJoin.fetch("borrower", JoinType.LEFT);
What is the reason for not doing:
Fetch<Person, Loan> fetchJoin = personRoot.fetch("loan", JoinType.INNER);
fetchJoin.fetch("borrower", JoinType.LEFT);