Spring JPA Postgresql - 复合键在没有时重复

Spring JPA Postgresql - Composite keys are duplicated when one is not

我遇到了一些麻烦,希望你能帮助我,我有以下实体:

应用class:

@Entity
@Table(name = "apps")
public class App {
    @Id
    @Column(length = 15)
    private String name;

    @Column(length = 40)
    private String web;

    @Column(length = 50)
    private String mailDomain;

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "app")
    private List<SocialNetwork> socialNetworks = new ArrayList<>();

//getters, setters, equals and hash

社交网络Class:

@Entity
@Table(name = "social_networks")
@IdClass(SocialNetworkCompositeKey.class)
public class SocialNetwork {
    @Id
    @Column(length = 15)
    private String name;

    @Id
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "app")
    private App app;

    @Column(nullable = false, length = 40)
    private String url;

//getters, setters, equals and hash

SocialNetworkCompositeKey Class:

public class SocialNetworkCompositeKey implements Serializable {
    private String name;
    private String app;

//equals and hash

现在每当我尝试在我的程序中或直接在数据库中插入应用程序时,我都会收到异常:

Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "uk_590itpuvpqppd9f0g2w5y8bml"
  Detail: Key (app)=(Uli App) already exists.

这是在尝试插入 2 条记录时:

        app       name     url
----+---------+-----------+---------
  1 | Uli App | Twitter   | http...
----+---------+-----------+---------  
  2 | Uli App |  Linkedin | http...
----+---------+-----------+---------

我正在使用 Spring 引导和 JPA 的最新版本。所以我使用 JpaRepository 作为我的存储库。即使我尝试使用 pgAdmin 在数据库中手动输入这些行,它也会给我同样的错误。

我不确定它是否相关,但我使用休眠中的 ddl-auto: update 来自动创建表。

希望大家帮帮我,干杯

因为@Morteza 说我的人际关系是错误的。通过这个和其他教程我在挖掘了很多之后发现(在发布这个之前我真的用谷歌搜索了很多)我能够通过在 Social Networks [=] 中将关系从 @OneToMany 更改为 @ManyToOne 来修复它23=]。这些是我所做的更改:

应用class:

@OneToMany(mappedBy = "app", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
private List<SocialNetwork> socialNetworks = new ArrayList<>();

社交网络class:

@Id
@ManyToOne(fetch = FetchType.LAZY)
private App app;

感谢大家的帮助!