2015-05-19 2 views
0

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

public List<Booking> getBookingsByUser(User user) { 
    CriteriaBuilder cb = em.getCriteriaBuilder(); 
    CriteriaQuery<Booking> createQuery = cb.createQuery(Booking.class); 
    Root<Booking> booking = createQuery.from(Booking.class); 
    Join<Booking, UsersProjects> join = booking.join(Booking_.userProject, JoinType.INNER); 
    createQuery.where(cb.equal(join.get(UsersProjects_.user), user)); 
    createQuery.select(booking); 
    return em.createQuery(createQuery).getResultList(); 
} 

Это работает отлично. Но как переписать это, чтобы найти объекты с помощью userId (Long)? Метамодель пользователя имеет User_.id (SingularAttribute).

Пользователь также является субъектом. И у «UserProject» есть ровно один Пользователь и один Проект.

+0

добавить перекрестное соединение, а затем с помощью ИНЕК связать два объекта любых атрибутов они имеют в общем –

+1

ли 'User' Субъект ? Какая связь между «UserProjects» и «User»? – perissf

+0

@NEil how - не могли бы вы показать как код? – dermoritz

ответ

1

Добавить еще один пункт присоединиться между UserProjects и User:

Join<Booking, UsersProjects> userProjectsJoin = booking.join(Booking_.userProject, JoinType.INNER); 
Join<UsersProjects, User> userJoin = userProjectsJoin.join(UserProjects_.user); 
createQuery.where(cb.equal(userJoin.get(User_.id), userId)); 
+0

Я попробовал это посмотреть мой отредактированный вопрос - он не работает ?! не могли бы вы проверить, правильно ли это? – dermoritz

+1

Покажите отношения, как я спросил в своем комментарии к вашему вопросу, и если он не работает, покажите, что это значит: вы получаете сообщение об ошибке? Какая ошибка? Или вы получаете результат, отличный от того, что вы ожидали? Если да, запишите полученный запрос и опубликуйте его. Кстати, код выглядит правильно, кроме того факта, что вы используете переменную 'projectId' вместо' userId'. – perissf

+0

вы спасли мой день - проблема действительно возилась с userId/projectId :-P. – dermoritz

Смежные вопросы