You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过JPA Specification访问关联实体嵌入主键中的字段

错误原因

JPA Criteria API 的get()方法不支持直接传入带.的嵌套属性路径访问嵌入ID中的字段,需要分层获取嵌套属性。

正确写法

1. 硬编码属性名写法

return (root, query, criteriaBuilder) -> {
    Join<Parent, Child> join = root.join("child");
    // 先获取EmbeddedId字段,再获取id内的type属性
    return criteriaBuilder.equal(join.get("id").get("type"), val);
};

2. 静态元模型推荐写法(避免硬编码字符串出错)

如果项目已生成JPA静态元模型,可使用类型安全的写法:

return (root, query, criteriaBuilder) -> {
    Join<Parent, Child> join = root.join(Parent_.child);
    return criteriaBuilder.equal(join.get(Child_.id).get(ChildId_.type), val);
};

注意检查点

  • 确认Child实体的主键字段加了@EmbeddedId注解,对应的嵌入式ID类实现了Serializable接口,类内type字段名拼写正确
  • 确认Parent实体中关联Child的属性名确实为child,一对一映射配置无误

内容的提问来源于stack exchange,提问作者ANKIT PRASAD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:18:03