首页 > 解决方案 > 我如何将此 sql 转换为 jpa 谓词

问题描述

如何将此 SQL 转换为 jpa 谓词?

我有以下表格

团队 编号 (pk)

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

用户 ID (pk)

案例 id (pk) team_id (fk -> Team.id)

给定一个用户 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));

但不出所料,它在尝试加入 TeamMember 时无法识别 Team 中的 team_id

谢谢 ...

标签: jpacriteria-api

解决方案


固定的

我没有在我的团队实体定义中使用该列表...

@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)); 

推荐阅读