如何将此sql转换为jpa谓词
如何将此SQL转换为jpa谓词 我有下列表格 团队 id(主键) 团队成员 id(主键) 团队id(fk->team.id) 用户id(fk->user.id) 用户 id(主键) 案例 id(主键) 团队id(fk->team.id) 给定一个用户id,我想知道该用户是否在一个案例团队中 在sql中,这很简单如何将此sql转换为jpa谓词,jpa,criteria-api,Jpa,Criteria Api,如何将此SQL转换为jpa谓词 我有下列表格 团队 id(主键) 团队成员 id(主键) 团队id(fk->team.id) 用户id(fk->user.id) 用户 id(主键) 案例 id(主键) 团队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
SELECT c from Case c, TeamMember tm WHERE c.team_id = tm.team_id and tm.user_id = :param_user_Id
但是如何在jpa中为此创建谓词呢
我试过这个案子
EntityManager em=getEntityManager();
CriteriaBuilder cb=em.getCriteriaBuilder();
根rt=cq.from(Case.class);
List predList=new ArrayList();
int值=1;
添加(cb.equal(rt.get(“团队id”).get(“团队id”).get(“用户id”),value));
但毫不奇怪,当它试图加入团队成员时,它不会在团队中识别团队id
谢谢…已修复 我没有在我的团队实体定义中使用列表
@OneToMany(cascade = CascadeType.ALL, mappedBy = "team_id")
private List<TeamMember> team_member_list;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“team\u id”)
私人名单团队成员名单;
所以代码是
predList.add(cb.equal(rt.<Team>get("team_id").<List<TeamMember>>get("team_member_list").get("user_id"), value));
predList.add(cb.equal(rt.get(“团队id”).get(“团队成员列表”).get(“用户id”),value));
拆分表达式以简化它们:它有效吗Path team=rt.get(“team_id”)
?同时发布实体定义的相关部分。第二个提示:使用连接,例如:Path teamMember=team.join(“team\u member\u id”)
我可以拆分它们或创建连接,但这并不能解决外键位于错误一侧时如何从团队成员到团队成员的问题。在sql中,这很容易,因为我不需要团队表,但对于实体定义,我必须通过团队。而且我在javax.persistence.criteria.Path上没有.join方法
predList.add(cb.equal(rt.<Team>get("team_id").<List<TeamMember>>get("team_member_list").get("user_id"), value));