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

复合主键下如何生成按Group Id删除的deleteBy方法

解决思路

方法一:使用正确的派生查询命名

你的实体类中嵌入式主键的字段名为id,主键类内的目标属性是groupId,Spring Data JPA的派生查询需要通过嵌套属性路径引用,正确的方法写法如下:

void deleteById_GroupId(Long groupId);

原理:通过Id_GroupId连接实体中的主键字段(id)和主键类里的属性(groupId),路径中每个部分首字母需大写,下划线作为分隔符,符合Spring Data JPA的命名规则。

方法二:使用@Query手动定义删除语句

如果派生查询的命名规则容易混淆,更直接的方式是用@Query注解手动编写JPQL,避免命名歧义:

import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

// 在你的Repository接口中添加该方法
@Modifying
@Query("DELETE FROM HepatitisLabGroupTestType h WHERE h.id.groupId = :groupId")
void deleteByGroupId(@Param("groupId") Long groupId);

注意事项:

  • 必须添加@Modifying注解,告知Spring Data JPA这是修改类操作(删除属于此类)。
  • 调用该方法时需确保处于事务上下文(比如在Service层方法上添加@Transactional注解)。

额外检查点

  • 确认你的Repository接口继承了JpaRepository<HepatitisLabGroupTestType, HepatitisLabGroupTestTypePrimaryKey>或CrudRepository。
  • 核对实体类和主键类的字段名,确保没有拼写错误(比如实体中主键字段确实是id,主键类中属性确实是groupId)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:17:42