Как мне преобразовать этот sql в предикат jpa - PullRequest
0 голосов
/ 07 ноября 2019

Как мне преобразовать этот SQL в предикат jpa?

У меня есть следующие таблицы

Team id (pk)

TeamMember id (pk) team_id (fk -> Team.id) user_id (fk -> User.id)

Пользователь id (pk)

Case id (pk) team_id (fk -> Team.id)

Учитывая идентификатор пользователя, я хочу выяснить, входит ли этот пользователь в команду по делу.

В sql это легко

SELECT c from Case c, TeamMember tm WHERE c.team_id = tm.team_id and tm.user_id = :param_user_Id

Но как мне создать предикат в jpaдля этого.

Я пробовал это для случая № 1

EntityManager em = getEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
Root rt = cq.from(Case.class);
List<Predicate> predList = new ArrayList<>();
int value = 1;

predList.add(cb.equal(rt.<Team>get("team_id").<TeamMember>get("team_id").<User>get("user_id"), value));

, но неудивительно, что он не распознает team_id в Team при попытке присоединиться к TeamMember

спасибо ...

1 Ответ

0 голосов
/ 08 ноября 2019

Исправлено

Я не использовал список в определении сущности моей команды ...

@OneToMany(cascade = CascadeType.ALL, mappedBy = "team_id")
    private List<TeamMember> team_member_list; 

Итак, код ...

predList.add(cb.equal(rt.<Team>get("team_id").<List<TeamMember>>get("team_member_list").get("user_id"), value)); 
...