Модель не может быть приведена - внутренняя ошибка при весенней загрузке и Criteria API Join

Я пытаюсь присоединиться и получить объединенный результат, используя весеннюю загрузку и соединение API критериев. Здесь я пытаюсь получить идентификатор роли из второй таблицы, где совпадение идентификатора пользователя найдено путем присоединения к первой таблице. Когда я запускаю свой запрос, я получаю сообщение об ошибке:

Ошибка обновления

{
"timestamp": "2018-09-10T10:54:01.163+0000",
"status": 500,
"error": "Internal Server Error",
"message": "com.example.model.Roles cannot be cast to 

}

Здесь я не использовал классы, сгенерированные метамоделью. Без этого я реализовал. Но все равно возникает та же ошибка.

2
0
112
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Неправильны две вещи:

  1. multiselect() берет список выбранных полей. Вы не должны передавать javax.persistence.criteria.Join в его параметр.
  2. Ваше условие запроса вообще не связано с присоединением, так как условие в поле 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();

да. Я понял способ реализации. Благодарю за ваш ответ.

Jacob 11.09.2018 14:32

Другие вопросы по теме