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

Spring中能否在@Query内获取对象ID?JPA查询语法疑问

问题解答

1. 是否支持ps.idspeciality.id = ?1语法?

完全支持。JPQL(Java Persistence Query Language)允许通过实体关联属性直接访问其主键字段,这种写法合法且常用,刚好能解决你当前的类型不匹配问题——ps.idspeciality是Specialities实体对象,通过.id可直接获取它的主键值,与传入的Integer类型参数?1做比较。

2. 最简洁的修改方案

直接修改@Query语句中的匹配条件,将ps.idspeciality = ?1替换为ps.idspeciality.id = ?1即可,修改后的完整代码如下:

@Query("SELECT p "
        + "FROM Physicians p "
        + "JOIN Physicianspecialities ps ON (ps.idphysician = p.id AND ps.idspeciality.id = ?1 AND ps.validfrom <= ?2 AND (ps.validto >= ?2 OR ps.validto IS NULL)) "
        + "JOIN Personnel pe ON (pe.id = p.idPersonnel and pe.validfrom <= ?2 AND (pe.validto >= ?2 OR pe.validto IS NULL)) "
        + "ORDER BY p.id DESC")
List<Physicians> getAllByDateAndSpeciality(Integer idSpeciality, Date date);

这种方式无需修改实体结构、额外添加JOIN关联或创建实体对象,是最直接简洁的解决办法。

3. 查询语言的文档来源

@Query注解默认使用JPQL,相关文档可参考:

  • Jakarta Persistence官方规范文档(JPQL是其中的核心查询语言模块)
  • Spring Data JPA官方参考文档中关于JPQL查询的章节

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:22:04