Критерий запроса (я не проверял / не отлаживал его, возможно, потребуется изменить):
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Tuple> query = cb.createTupleQuery();
Root<UserDetail> root = query.from(UserDetail.class);
Join<UserDetail, Vehicle> join = root.join("vehicle", JoinType.LEFT);
query.multiselect(
root.get("userId"),
root.get("userName"),
join.get("vehicleId"),
join.get("vehicleName")
))
List<Tuple> x = entityManager.createQuery(query).getResultList();
КСТАТИ. JPQL-запрос неверен. Не нужно где условие, оно будет создано JPA автоматически.
SELECT ud.userId, ud.userName ,vh.vehicleId, vh.vehicleName
FROM UserDetail ud
LEFT JOIN ud.vehicle