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

JPA使用@EmbeddedId复合主键时如何编写按courseId查询的方法

解决方案

你可以通过以下两种正确方式定义查询方法:


方式1:使用属性层级分隔的派生查询方法

Spring Data JPA 中访问嵌套对象属性时,需要用下划线 _ 明确标注层级关系,避免字段解析歧义,直接在Repository中添加如下方法即可:

List<CourseRating> findById_CourseId(int courseId);

该方法名会被JPA正确解析为:查询主实体CourseRating的id属性(复合主键对象)下courseId等于传入参数的所有记录。


方式2:使用@Query自定义JPQL查询(更推荐,可读性更高)

如果不想受限于方法名的命名规则,或者后续需要扩展更多查询条件,可以直接自定义JPQL语句:

@Repository
public interface CourseRatingRepository extends JpaRepository<CourseRating, CourseRatingKey> {
    @Query("SELECT cr FROM CourseRating cr WHERE cr.id.courseId = :courseId")
    List<CourseRating> findAllByCourseId(@Param("courseId") int courseId);
}

如果使用Spring Data 2.4及以上版本,参数名和JPQL中占位符命名一致的情况下,可以省略@Param注解。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 00:39:02