【发布时间】:2019-02-06 22:19:15
【问题描述】:
我遇到了一些麻烦,希望你能帮助我,我有以下实体:
应用类:
@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
社交网络类:
@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 类:
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 boot 和 JPA。所以我使用JpaRepository 作为我的存储库。即使我尝试使用 pgAdmin 在数据库中手动输入这些行,它也会给我同样的错误。
我不确定它是否相关,但我使用 hibernate 中的 ddl-auto: update 来自动创建表。
希望你们能帮助我,干杯。
【问题讨论】:
-
App和SocialNetwork之间的关系不对。 -
@MortezaJalambadani 想说的是:你只有 @JoinColumn(name = "app") 但 SocialNetwork 有一个复合键,所以你应该有两个 JoinColumns
-
嗨@SimonMartinelli,为名称添加JoinColumn 不起作用并给出了同样的问题,名称也是社交网络中的一个字段,而不是另一个表作为“应用程序”的PK
标签: postgresql hibernate spring-boot jpa composite-key