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;
感谢大家的帮助!
我遇到了一些麻烦,希望你能帮助我,我有以下实体:
应用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;
感谢大家的帮助!