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