Java 保存返回子记录时的Hibernate联接表已存在

Java 保存返回子记录时的Hibernate联接表已存在,java,spring,hibernate,spring-data-jpa,spring-data,Java,Spring,Hibernate,Spring Data Jpa,Spring Data,我正在使用spring数据(Hibernate) 用户型号: @Entity @Table (name="users") @Inheritance(strategy = InheritanceType.JOINED) public class User { @Id @GeneratedValue(strategy = GenerationType.Auto) private UUID id; @Column(unique=true) private String emai

我正在使用spring数据(Hibernate)

用户型号:

@Entity
@Table (name="users")
@Inheritance(strategy = InheritanceType.JOINED)

public class User {
  @Id
  @GeneratedValue(strategy = GenerationType.Auto)
  private UUID id;

  @Column(unique=true)
  private String email;

  @ManyToMany
  @JoinTable(
    name="users_skills",
    joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
    inverseJoinColumns = @JoinColumn(name = "skill_id", referencedColumnName = "id")
  )
  private Collection<Skill> skills;

  // Getter's Setter's
}
用户存储库

@Respository
public interface UserRepository extends JpaRepository<User, UUID> {
    boolean existsByEmail(String email);
}
{ 
   "email": "dummy@exmaple.com", 
   "skills": [{"name": "C++"}, {"name":"Java"}]
}
如果数据库中不存在该技能,那么它就可以工作,如果我尝试附加现有技能,则会出现以下错误

ERROR: duplicate key value violates unique constraint "uk_85woe63nu9klkk9fa73vf0jd0"
  Detail: Key (name)=(C++) already exists.
有没有办法附加用户现有的技能,提前感谢

可能的解决方案

  • 我通过了请求体中的技能并开始工作
  • 还有另一种方法,预保存我需要按id查找技能并将其添加到用户技能集合中(由@Rohit建议)

按名称查找技能,并在保存之前将其附加到用户对象。它可以工作,我想可能有一个hibernate注释可以自动处理此问题:)谢谢
{ 
   "email": "dummy@exmaple.com", 
   "skills": [{"name": "C++"}, {"name":"Java"}]
}
ERROR: duplicate key value violates unique constraint "uk_85woe63nu9klkk9fa73vf0jd0"
  Detail: Key (name)=(C++) already exists.
{ 
   "email": "dummy@exmaple.com", 
   "skills": [{"name": "C++", "id": 1}, {"name":"Java", "id": 2}]
}