我遇到了一些麻烦,希望您能为我提供帮助,我有以下实体:
应用类:
@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在数据库中手动输入这些行,也会给我同样的错误。
我不确定是否相关,但是我从休眠状态使用ddl-auto: update
自动创建表。
我希望你们能帮助我,加油。
答案 0 :(得分:0)
@Morteza表示我的关系有误。通过本教程和其他教程,我发现了很多东西(在发布之前,我确实在Google上搜索了很多),我可以通过将@OneToMany
类中的关系从@ManyToOne
更改为Social Networks
来修复它。这些是我所做的更改:
应用类:
@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;
感谢帮助人员!