我想从网络客户端(Angular )更新"Livre"实体中的集合"genres".

@Data
@Table(name="livres")
@Entity
public class Livre {
    
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    private Long id;
    
    private String titre;
    
    private String description;
    
    @ManyToMany
    @JoinTable(
        name = "livre_genre",
        joinColumns = @JoinColumn(name = "livre_id"),
        inverseJoinColumns = @JoinColumn(name = "genre_id")
    )
    private Set<Genre> genres = new HashSet<>();
    
    /* Many books have one Author */
    @ManyToOne
    @JoinColumn(name = "auteur_id")
    private Auteur auteur;
    
    
}

这是客户端发送的http请求:

http://localhost:2000/livres/update/7

**这里我得到的错误是:**

ERREUR: the value of a duplicate key rompt the unique constraint « livre_genre_pkey »   Détail : the key « (livre_id, genre_id)=(7, 1) » existe déjà.

请谁告诉我,我怎么才能解决这个问题?

推荐答案

很难知道,因为更新Set<Genre>的代码看不到.从消息中可以看出,该实体已在数据库中.我可以猜想,您可能是在删除集合,而不是删除元素和添加新元素.

判断在您的代码中,当您更新集合时,您是否正在使用来自前端的元素分配一个新的哈希集.我猜您正在将实体集指定给从Angular 接收的数据.

如果是这样的话,请try :

genres.clear();
genres.addAll(genres_from_angular_set);

并避免:

genres = genres_from_angular_set;

在第二种情况下,您将再次生成关系,并且由于已经存储了一些关系genre,因此您具有唯一键限制.

Java相关问答推荐

在FML中删除关键帧动画

如何在Spring Security中设置CustomLogin路径?

为什么我们仍然需要实现noArgsConstructor如果Java默认提供一个非参数化的构造函数?''

Jlink选项&-strie-ative-Commands";的作用是什么?

如何修复IndexOutOfBoundsException在ClerView适配器的onRowMoved函数?

调用引发泛型异常的泛型方法时出现编译错误

呈现文本和四舍五入矩形时出现的JavaFX窗格白色瑕疵

在Java中如何从Executors.newFixedThreadPool(MAX_THREAD_COUNT())迁移到虚拟线程

为什么Java编译器不区分不同类型的方法?

为什么Spring Boot项目无法为基于MySQL的CRUD应用程序找到从JPARepository接口扩展的ProductRepository?

使用OAuth 2.0资源服务器JWT时的授权(授权)问题

为什么同步数据块无效?

为什么Collectors.toList()不能保证易变性

是否为计划任务补偿系统睡眠?

如何在透视表中添加对计数列的筛选?

为什么这种递归会有这样的行为?

Java KeyListener不工作或被添加

如何使用jOOQ在PostgreSQL中从枚举类型生成Java枚举

如何在MPAndroidChart中的条形图上正确添加标签

当我try 返回可选时,Mock无法正常工作