jpa - 我如何将此 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
谢谢 ...
解决方案
固定的
我没有在我的团队实体定义中使用该列表...
@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));
推荐阅读
- python - 没有这样的文件或目录 google colab
- django - 如何为带有翻译的 django rest 框架模型创建自定义序列化程序
- python - 在二维数组中查找字符串并将它们转换为浮点数 [Python]
- java - ID 生成器比较
- business-objects - Web Intelligence:限制块中的行数
- python - “没有名为 dgl 的模块”,但该模块有效
- dictionary - 使用 Ansible set_fact 从寄存器结果 systemctl 创建字典
- angular - Angular Reactive forms - 来自异步调用的值不更新表单
- node.js - 无法连接到伊蚊 MQTT 代理
- junit - 论据不同!需要:实际调用有不同的参数: