Spring 使用可嵌入键中的两个字段删除的数据 JPA 方法

Spring Data JPA method for deleting using a two fields in the embaddable key

这是主要实体 class,它有一个 embeddedId

public class LabResHivMutation implements Serializable {
    private static final long serialVersionUID = 1L;

    @EmbeddedId
    private LabResHivMutationPK id;

    private String comments;

    @Column(name="MUTATION_TYPE_ID")
    private BigDecimal mutationTypeId;

    @Column(name="VALUE")
    private String value;   

}

这是可嵌入的密钥

@Embeddable
public class LabResHivMutationPK implements Serializable {
    //default serial version id, required for serializable classes.
    private static final long serialVersionUID = 1L;

    @Column(name="TO_INST")
    private Long toInst;

    @Column(name="REL_INVSTID")
    private long relInvstid;

    @Column(name="MUTATION_ID")
    private long mutationId;

}

spring 数据 Jpa 中是否有任何可用的删除方法仅基于两个可嵌入密钥(toInst、relInvstid)进行删除。

我仍然可以编写 JPQL 查询来删除它。我的问题是有什么方法可以做到这一点。

喜欢 deleteById 吗?

是的,repo.deleteByIdToInstAndIdRelInvstid(toInst,relInnvstid) 如您所见,您必须指定 deleteByIdToInst ,这就是您引用嵌入式 ID 字段的方式,与引用外部关系字段的方式相同。这里 Id 匹配您的字段命名

@EmbeddedId
private LabResHivMutationPK id;

有两种删除实体的方法:要么使用它自己的“JPA Repository derived delete methodlong deleteByFirstIdAndSecondId(long firstId , secondId)
在您的服务中,您可以简单地调用它:repository.deleteByFirstIdAndSecondId(long firstId , secondId)

另一种方法是通过父实体排除子实体(或实体取决于关系类型)。

用户使用@Embedded 键在实体将有多个键时使用下划线“_”。 示例:repository.deleteByid_toInst();