首页 > 解决方案 > Spring数据JPA删除查询

问题描述

我想看看这是否是使用 spring JPA 编写删除查询的正确方法。我有一张表,主键为id,外键为study_id。我想删除基于study_id. 我不能只delete在 JPA 中使用方法,因为study_id它不是唯一键。所以我写了新方法:

    @Modifying
    @Transactional
    @Query(value = "DELETE FROM MY_TABLE WHERE STUDY_ID = :studyId", nativeQuery = true)
    int deleteByStudyId(@Param("studyId") long studyId);

我从https://javadeveloperzone.com/spring-boot/spring-data-jpa-delete-query/#3_Delete_Operation_using_Custom_Query找到了这个。但是,我不确定为什么 @TransactionalnativeQuery是正确处理它所必需的。没有它们,我会得到错误。我也想知道这是否是从表中删除的正确方法。这可行,但我对 Spring JPA 很陌生。

标签: javaspringspring-bootjpa

解决方案


我不确定为什么需要 @Transactional 和 nativeQuery 才能正确处理它。

没有 nativeQuery 意味着您使用的是 JPQL,那么您应该在 Entity 中使用实体名称和列名称而不是数据库表名称或列

我也想知道这是否是从表中删除的正确方法。

我认为更简单的方法是以这种方式使用 JPA 方法命名查询

Long deleteByStudyId(long studyId);

推荐阅读