Я пытаюсь присоединиться и получить объединенный результат, используя весеннюю загрузку и соединение API критериев. Здесь я пытаюсь получить идентификатор роли из второй таблицы, где совпадение идентификатора пользователя найдено путем присоединения к первой таблице. Когда я запускаю свой запрос, я получаю сообщение об ошибке:
Ошибка обновления
{
"timestamp": "2018-09-10T10:54:01.163+0000",
"status": 500,
"error": "Internal Server Error",
"message": "com.example.model.Roles cannot be cast to
}
Здесь я не использовал классы, сгенерированные метамоделью. Без этого я реализовал. Но все равно возникает та же ошибка.
Неправильны две вещи:
multiselect() берет список выбранных полей. Вы не должны передавать javax.persistence.criteria.Join в его параметр.nuserId может быть заполнено только таблицей Users.Если вы просто хотите получить одновременно и User, и его UserRoleMapping, вы можете попробовать:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Users> cq = cb.createQuery(Users.class);
Root<Users> rootRoles = cq.from(Users.class);
rootRoles.fetch("roleUserRoleMappingMappingJoin", JoinType.LEFT);
cq.select(rootRoles).where(cb.equal(rootRoles.get("nuserId"),nuserID));
List<Users> roleJoinResultObj = em.createQuery(cq).getResultList();
да. Я понял способ реализации. Благодарю за ваш ответ.