Spring boot Spring boot在POST上出现多对多重复密钥问题,而不是在PUT上

Spring boot Spring boot在POST上出现多对多重复密钥问题,而不是在PUT上,spring-boot,spring-data-jpa,many-to-many,Spring Boot,Spring Data Jpa,Many To Many,我有两个表:Materials和Hashtags,它们有多对多的关系。因此,对于hashtags,我只存储名称(字符串),它可以用于多种材料,我不关心删除材料和hashtags而不删除 我面临的问题是,只有在使用现有的hashtag创建新材质时,hashtag中才会出现重复键错误。如果我在没有hasthags的情况下创建一个新材质,然后用hashtags更新该材质,那么效果会很好,并且都在同一个函数save()中 在material service中,PUT和POST端点在控制器中调用的函数sa

我有两个表:Materials和Hashtags,它们有多对多的关系。因此,对于hashtags,我只存储名称(字符串),它可以用于多种材料,我不关心删除材料和hashtags而不删除

我面临的问题是,只有在使用现有的hashtag创建新材质时,hashtag中才会出现重复键错误。如果我在没有hasthags的情况下创建一个新材质,然后用hashtags更新该材质,那么效果会很好,并且都在同一个函数save()中

在material service中,PUT和POST端点在控制器中调用的函数save:

@Transactional
public Long save(String instanceId, MaterialDetailDTO material) {

    Material newMaterial = materialDetailMapper.toEntity(material);
    newMaterial.setInstanceId(instanceId);

    newMaterial = materialRepository.saveAndFlush(newMaterial);  <----- HERE I GET THE ERROR
    return newMaterial.getId();

}
@Transactional
公共长保存(字符串instanceId,MaterialDetailDTO material){
Material newMaterial=materialDetailMapper.toEntity(材料);
newMaterial.setInstanceId(instanceId);
newMaterial=materialRepository.saveAndFlush(newMaterial);
@Data
@Entity
@Table(name = "hashtags")
public class Hashtag {

    @Id private String name;
    @ManyToMany(mappedBy = "hashtags")
    private Set<Material> materials = new HashSet<>();

}
@Data
@Entity
@Table(name = "materials")
public class Material extends BaseEntity implements Serializable {

    private @Id @GeneratedValue long id;
    @NotNull private String code;

    @ManyToMany(cascade = {
        CascadeType.PERSIST,
        CascadeType.MERGE
    })
    @JoinTable(name = "material_hashtag",
        joinColumns = @JoinColumn(name = "material_id"),
        inverseJoinColumns = @JoinColumn(name = "hashtag_id")
    )
    private Set<Hashtag> hashtags = new HashSet<>();

}