复合主键下如何生成按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
相关产品推荐
相关产品推荐

