我有一些麻烦,希望你能帮助我,我有以下实体:
App类:
@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在DB中手动输入这些行,它也会给我同样的错误。
我不确定它是否相关但我使用来自hibernate的ddl-auto: update
来自动创建表。
我希望你们能帮助我,欢呼。
正如@Morteza所说,我的关系是错误的。通过这个和其他教程,我发现了很多(我在发布之前我真的用了很多Goog)我通过改变@OneToMany
类中@ManyToOne
到Social Networks
的关系来解决它。这些是我所做的改变:
App类:
@OneToMany(mappedBy = "app", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
private List<SocialNetwork> socialNetworks = new ArrayList<>();
社交网络课程:
@Id
@ManyToOne(fetch = FetchType.LAZY)
private App app;
谢谢你的帮助!