у меня есть следующие четыре таблицы:JPA/Hibernate: CriteriaBuilder - Как создать запрос с использованием объекта отношения?
SCHEDULE_REQUEST таблице: ID, APPLICATION_ID (ФК)
ПРИМЕНЕНИЕ ТАБЛИЦА: ID. КОД
USER_APPLICATION ТАБЛИЦА: APPLICATION_ID (FK), USER_ID (FK)
ПОЛЬЗОВАТЕЛЯ ТАБЛИЦА: ID, NAME
Теперь я хотел создать критерии строитель, где условие для выбора ScheduleRequests для указанных идентификаторов пользователя.
У меня есть следующие коды:
List<User> usersList = getSelectedUsers(); // userList contains users I wanted to select
CriteriaBuilder builder = getJpaTemplate().getEntityManagerFactory().getCriteriaBuilder();
CriteriaQuery<ScheduleRequest> criteria = builder.createQuery(ScheduleRequest.class);
Root<ScheduleRequest> scheduleRequest = criteria.from(ScheduleRequest.class);
criteria = criteria.select(scheduleRequest);
ParameterExpression<User> usersIdsParam = null;
if (usersList != null) {
usersIdsParam = builder.parameter(User.class);
params.add(builder.equal(scheduleRequest.get("application.userApplications.user"), usersIdsParam));
}
criteria = criteria.where(params.toArray(new Predicate[0]));
TypedQuery<ScheduleRequest> query = getJpaTemplate().getEntityManagerFactory().createEntityManager().createQuery(criteria);
// Compile Time Error here:
// The method setParameter(Parameter<T>, T) in the type TypedQuery<ScheduleRequest> is not // applicable for the arguments (ParameterExpression<User>, List<User>)
query.setParameter(usersIdsParam, usersList);
return query.getResultList();
Можете ли вы помочь мне, как пройти фильтр запроса к объекту отношения? Я думаю, что я сделал в приложении «application.userApplications.user» неправильно? Пожалуйста, действительно нужна помощь. Спасибо заранее.
Hi perissf. Спасибо за помощь. Но у меня нет классов «ScheduleRequest_», «UserApplication_», «User_». Как мне их создать? А также в вашем псевдокоде вы не указали таблицу «Приложение»? Таблица отношений - таблица USER_APPLICATION, относящаяся к таблицам USER и APPLICATION. Прошу вас посоветуйте. Действительно ценю это. Благодарю. – Jemru
Я видел здесь несколько уроков, но я не уверен, как это сделать в моем случае. http://www.altuure.com/2010/09/23/jpa-criteria-api-by-samples-%E2%80%93-part-ii/ – Jemru
Я обновил свой ответ, добавив некоторые ссылки и добавив третье соединение согласно вашей информации – perissf